当您创建一个共享对象并想要使用它时,您必须将您的工件链接到该共享对象的所有依赖项。例如。我创建了一个libtwocams.so 的
#include <opencv2/videoio.hpp>
void test() {
cv::VideoCapture v;
cv::Mat m;
v >> m;
}
要使用这个共享对象,我必须链接 libopencv_core、libopencv_videoio、libopencv_imgproc、libopencv_imgcodecs、libz 等等。我用
编译我的程序
g++ main.cpp -o main -ltwocams -lopencv_core -lopencv_imgproc -lopencv_imgcodecs -lopencv_videoio -lz -lwebp -lpthread -ltiff -lpng
另一种解决方案是将共享对象链接到依赖库。例如。
g++ -fPIC -shared twocams.cpp -o -ltwocams -lopencv_core -lopencv_imgproc -lopencv_imgcodecs -lopencv_videoio -lz -lwebp -lpthread -ltiff -lpng
创建一个共享库,使加载程序加载所有依赖项。您可以使用ldd 检查依赖关系。
库的顺序很重要。如果 libA 依赖于 libB,那么您必须先链接 libA,然后再链接 libB。
如果你使用 opencv 的共享库,那么你不需要链接所有其他依赖项。
这是一步一步的手册:
安装conan
安装cmake
将存储库 bincrafters 添加到柯南
conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan
创建:
- conanfile.txt
- CMakeLists.txt
- src/twocams.cpp
- 构建/
conanfile.txt:
[requires]
opencv/3.4.2@bincrafters/stable
[generators]
cmake
[options]
opencv:shared=True
CMakeLists.txt:
cmake_minimum_required(VERSION 3.12)
project(twocams)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
add_library(twocams SHARED src/twocams.cpp src/twocams.h)
target_link_libraries(twocams ${CONAN_LIBS})
转到build 并安装依赖项:
cd build
conan install .. --build missing
使用 cmake 构建项目:
cmake ..
cmake --build .