生成鏈結opencv庫檔案的so共享庫
需要注意
my_add.cpp
#include extern "c" int add(int a,int b);
int add(int a,int b)
my_add.h
extern "c" int add(int a,int b);
test_demo.cpp
#include #include "my_add.h"
using namespace std;
int main()
cmakelists.txt
#2019.12.30
#leo ma
cmake_minimum_required( version 2.8 )
project( create_so )
set( cmake_build_type release )
set( cmake_cxx_flags "-std=c++11 -o3" )
add_library(my_add shared my_add.cpp)
add_executable(create_so test_demo.cpp)
target_link_libraries(create_so my_add)
opencv_draw_circle.cpp
#include #include #include #include using namespace cv;
using namespace std;
extern "c" void draw_circle(int rows, int cols, unsigned char *src_data, unsigned char *ret_data);
void draw_circle(int rows, int cols, unsigned char *src_data , unsigned char *ret_data)
opencv_draw_circle.h
extern "c" void draw_circle(int rows, int cols, unsigned char *src_data, unsigned char *ret_data);
cmakelists.txt
#2019.12.30
cmake_minimum_required( version 2.8 )
project( opencv_draw_circle )
set( cmake_build_type release )
set( cmake_cxx_flags "-std=c++11 -o3" )
# opencv
find_package( opencv required )
include_directories( $ )
add_library(opencv_draw_circle shared opencv_draw_circle.cpp)
add_executable(test_demo_with_opencv test_demo_with_opencv.cpp)
target_link_libraries(test_demo_with_opencv $ opencv_draw_circle)
將roi0.png放到build資料夾下,可以看到程式正確呼叫,畫出圓圈。
在生成鏈結opencv庫檔案的so共享庫一節中,在庫檔案中沒有新增opencv庫的鏈結,但在執行檔案中新增了opencv庫的鏈結,程式可以正常呼叫。
實際上,目前生成的so檔案並不能被別的工程呼叫,如果需要被別的工程呼叫,還需要在cmakelists.txt新增一行:
target_link_libraries(opencv_draw_circle $)
完整cmakelists.txt為:
#2019.12.30
cmake_minimum_required( version 2.8 )
project( opencv_draw_circle )
set( cmake_build_type release )
set( cmake_cxx_flags "-std=c++11 -o3" )
# opencv
find_package( opencv required )
include_directories( $ )
add_library(opencv_draw_circle shared opencv_draw_circle.cpp)
target_link_libraries(opencv_draw_circle $)
add_executable(test_demo_with_opencv test_demo_with_opencv.cpp)
target_link_libraries(test_demo_with_opencv $ opencv_draw_circle)
ubuntu中出現找不到so之類共享庫的錯誤解決
文章出處 diy部落 linux環境變數名,該環境變數主要用於指定查詢共享庫 動態鏈結庫 時除了預設路徑之外的其他路徑。該路徑在預設路徑之前查詢 移植程式時的經常碰到需要使用一些特定的動態庫,而這些編譯好的動態庫放在我們自己建立的目錄裡,這時可以將這些目錄設定到ld library path中。當執...
c編譯生成so 庫
首先 gcc c fpic libst.c 生成 libst.o 然後gcc shared fpic o libst.so libst.o 生成 libst.so 動態鏈結庫 注意 fpic選項。pic指position independent code。共享庫要求有此選項,以便實現動態連線 dyn...
makefile 使用共享庫檔案so
環境 vmware workstation centos 6.4 x86 64 說明 2 gcc在鏈結的時候要加 l引數和 l引數 l後面跟的共享庫檔案的名字 如 共享庫檔案的名字如果是libmyso.so,那麼在寫的時候,就要把前面的lib和後面的.so去掉,得到myso。4 l 告訴gcc共享庫...