Ubuntu生成so共享庫的方法

2021-10-01 19:42:13 字數 2639 閱讀 3439

生成鏈結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共享庫...