鉴于
文件/usr/lib/gstreamer-0.10/libgstffmpeg.so
存在
在CMakeLists.txt中进行更改
方法1 find_library()
find_library(GST_FFMPEG NAMES gstffmpeg PATHS /usr/lib/gstreamer-0.10/)
...
target_link_libraries(MyLibraryOrMyExecutable $ {GST_FFMPEG})
当我使用上述配置(方法1)运行make
时,我收到以下错误
/ bin / ld:警告: libvpx.so.1 ,未找到/usr/lib/i386-linux-gnu/libavcodec.so.53(尝试使用-rpath或-rpath链接)
/ bin / ld:警告: libschroedinger-1.0.so.0 ,未找到/usr/lib/i386-linux-gnu/libavcodec.so.53(尝试使用-rpath或 - rpath的链接)
/ bin / ld:警告: libgsm.so.1 ,未找到/usr/lib/i386-linux-gnu/libavcodec.so.53(尝试使用-rpath或-rpath-链路)
看起来添加的库依赖于更多未链接的库!我可以在/ usr / lib中看到上面3个.so文件。因此,方法1的一种可能解决方案是添加三个find_library()
函数。对吗?
可能不是 - This question探讨了上述可能解决方案中发现的问题
方法2 link_directories()
link_directories(/usr/lib/gstreamer-0.10/)
target_link_libraries(MyLibraryOrMyExecutable gstffmpeg)
当我使用上述配置(方法2)运行make
时,我收到以下错误
bin / ld:找不到-lgstffmpeg
P.S。尝试阅读cmake的文档并在SO上搜索但无法解决我的问题。 我尝试了两种方法并且都存在问题
答案 0 :(得分:1)
首先回答你的Q3,我认为首选的方法是方法1。
来自link_directories
的文档:
请注意,此命令很少需要。 find_package()和find_library()返回的库位置是绝对路径。将这些绝对库文件路径直接传递给target_link_libraries()命令。 CMake将确保链接器找到它们。
无论采用哪种方法,我都不知道一种简单的方法来自动获取这些“子依赖项”的列表并添加它们。我只为每个人做find_package
或find_library
。
至少就是这样,如果找不到依赖项,那么你的项目会在CMake配置时而不是在链接时失败。
答案 1 :(得分:0)
我遇到类似的情况,我通过添加CMakesList.txt解决它,就在find_library()之前,添加此命令:
set(CMAKE_PREFIX_PATH / / path / to / your / lib /)
,但通常如果你的依赖库在usr / lib或usr / local / lib路径中,它可以通过很好地调用函数找到。