当我使用第三方库时,如何找到我需要链接的lib文件



例如,如果我在opencv中使用一个函数,我可以使用两个方法来指定库并链接它们。首先,我可以使用find_package(OpenCV 3.3 REQUIRED)和它们target_link_libraries( main ${OpenCV_LIBS}),因为宏包含了我们需要的所有库。第二个,我想链接我的opencv没有"。cmake";我需要给CMakeLists.txt一个CCD_ 3并使用CCD_。

所以我的问题是,在使用第二种方法时,如何快速找到应该链接的库。就像我在opencv_core.so中使用了一些函数,但实际上我在opencv中的许多库中尝试了几次就知道了。

除了阅读库文档之外,没有什么快速的方法可以做到这一点。在OpenCV中,它非常简单,文档指定了模块的列表,那么您的经验法则应该是:无论何时#include <opencv2/MODULE_NAME.hpp>,都链接到opencv_MODULE_NAME。例如#include <opencv2/imgproc.hpp>,那么您应该链接到opencv_imgproc

如果你事先没有这类信息,在Linux机器上,你可以调查可用的动态库中的符号:

for lib in `find LIB_PATH -name "*.so"`; do echo ${lib}; nm -D -C ${lib}; done

其中LIB_PATH是库的安装位置,例如/usr/lib

然后,您可以保存输出并搜索链接器在构建项目时报告的未定义符号。您可以使用更严格的模式(如libopencv*.so(来限制输出,而不是"*.so"

最新更新