【问题标题】:find_library or link_directories or find_package? What is better way? Error - Link libraries using cmakefind_library 或 link_directories 或 find_package?什么是更好的方法?错误 - 使用 cmake 链接库
【发布时间】:2013-07-25 11:39:52
【问题描述】:

给定
文件/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})

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

/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 链接)
/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

  • 第二季度。上述方法2如何解决问题?
  • 第三季度。方法 1 或 2 哪个更好?

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

【问题讨论】:

    标签: cmake gstreamer dynamic-linking shared-libraries


    【解决方案1】:

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

    来自link_directories 的文档:

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

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

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

    【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 2021-07-26
      • 2015-10-04
      • 2010-10-26
      • 1970-01-01
      相关资源
      最近更新 更多