3

鉴于
文件/usr/lib/gstreamer-0.10/libgstffmpeg.so存在
在 CMakeLists.txt 中进行更改

方法一 find_library()

find_library(GST_FFMPEG NAMES gstffmpeg PATHS /usr/lib/gstreamer-0.10/)
...
target_link_libraries(MyLibraryOrMyExecutable ${GST_FFMPEG})

当我make使用上述配置(方法 1)运行时,出现以下错误

/bin/ld:警告:libvpx.so.1,/usr/lib/i386-linux-gnu/libavcodec.so.53 需要,未找到(尝试使用 -rpath 或 -rpath-link)
/bin/ld:警告:libschroedinger-1.0.so.0,/usr/lib/i386-linux-gnu/libavcodec.so.53 需要,未找到(尝试使用 -rpath 或 -rpath-link)
/bin/ld:警告:libgsm .so.1,/usr/lib/i386-linux-gnu/libavcodec.so.53 需要,未找到(尝试使用 -rpath 或 -rpath-link)

看起来添加的库取决于更多未链接的库!我可以在 /usr/lib 中看到以上 3 个 .so 文件。因此,方法 1 的一种可能解决方案是添加另外三个find_library()功能。正确的 ?

可能不是 -这个问题探讨了上述可能解决方案中发现的问题

  • Q1。有没有其他方法可以节省查找依赖库并链接它们的工作?一种使用它自动链接所有依赖库的方法?

方法二 link_directories()

链接目录(/usr/lib/gstreamer-0.10/)目标链接库
(MyLibraryOrMyExecutable gstffmpeg)

当我make使用上述配置(方法 2)运行时,出现以下错误

bin/ld: 找不到 -lgstffmpeg

  • Q2。如何解决上述方法2的问题?
  • Q3。哪种方法1或2更好?

PS 尝试阅读 cmake 的文档并在 SO 上进行搜索,但无法解决我的问题。我尝试了两种方法,但都遇到了问题

4

2 回答 2

1

要首先回答您的 Q3,我认为首选方法是方法 1。

从文档中link_directories

请注意,此命令很少需要。find_package() 和 find_library() 返回的库位置是绝对路径。将这些绝对库文件路径直接传递给 target_link_libraries() 命令。CMake 将确保链接器找到它们。

无论您采用哪种方法,我都不知道有一种简单的方法可以自动获取这些“子依赖项”的列表并添加它们。我只想为每个做一个find_packagefind_library

至少这样,如果没有找到依赖项,您的项目会在 CMake 配置时失败,而不是在链接时失败。

于 2013-07-25T12:12:29.677 回答
0

我遇到类似的情况,我通过添加 CMakesList.txt 来解决它,就在 find_library() 之前,添加这个命令:

设置(CMAKE_PREFIX_PATH /the/path/to/your/lib/)

,但通常如果你的依赖库在 usr/lib 或 usr/local/lib 路径下,它可以通过调用函数找到。

于 2013-07-25T14:11:50.557 回答