Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找\u库或链接\u目录或查找\u包?什么是更好的方法?错误-使用cmake链接库_Cmake_Gstreamer_Dynamic Linking_Shared Libraries - Fatal编程技术网

查找\u库或链接\u目录或查找\u包?什么是更好的方法?错误-使用cmake链接库

查找\u库或链接\u目录或查找\u包?什么是更好的方法?错误-使用cmake链接库,cmake,gstreamer,dynamic-linking,shared-libraries,Cmake,Gstreamer,Dynamic Linking,Shared Libraries,给定的 文件/usr/lib/gstreamer-0.10/libgstffmpeg.so存在 在CMakeLists.txt中进行更改 方法1查找库() 查找库(GST\u FFMPEG名称gstffmpeg路径/usr/lib/gstreamer-0.10/) … 目标链接库(MyLibrary或MyExecutable${GST\U FFMPEG}) 当我使用上述配置(方法1)运行make时,会出现以下错误 /bin/ld:警告:libvpx.so.1,未找到/usr/lib/i386 l

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

方法1
查找库()

查找库(GST\u FFMPEG名称gstffmpeg路径/usr/lib/gstreamer-0.10/)

目标链接库(MyLibrary或MyExecutable${GST\U 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()
函数。对吧?

可能不是-探索上述可能解决方案中发现的问题

  • 问题1。有没有其他方法可以省去寻找目标的工作 依赖库和链接库?所有依赖库自动链接的方法
方法2
链接目录()

链接目录(/usr/lib/gstreamer-0.10/)
目标链接库(MyLibrary或MyExecutable gstffmpeg)

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

bin/ld:找不到-lgstffmpeg

  • 问题2。如何用上述方法2解决问题
  • 第三季度。哪种方法1或2更好
p.S.尝试阅读cmake文档并进行搜索,但无法解决我的问题。
我尝试了两种方法,但两种方法都有问题。

首先回答您的第三个问题,我认为首选方法是方法1

从以下文件:

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

不管您采取什么方法,我都不知道有什么简单的方法可以自动获取这些“子依赖项”的列表并添加它们。我只需要为每个文件执行
find_包
find_库


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

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

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


,但通常情况下,如果依赖项库位于usr/lib或usr/local/lib路径中,它可以通过调用函数来查找。

这似乎与此处的建议相冲突: