首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解target_link_libraries

理解target_link_libraries
EN

Stack Overflow用户
提问于 2018-09-05 20:00:26
回答 2查看 1.9K关注 0票数 1

我是Linux新手。我在我的CMakeLists.txt中看到了以下几点;

代码语言:javascript
复制
  target_link_libraries(app wiringPi
                          serializer
                          iothub_client
                          iothub_client_mqtt_transport
                          umqtt
                          aziotsharedutil
                          ssl
                          crypto
                          curl
                          pthread
                          m
                          ssl
                          crypto)

我的问题[理解]是这样做的

  1. 我们是否告诉CMake工具构建wiringPi、序列化程序等,并链接到app(这是在我的代码中创建的可执行文件)?
  2. 这些图书馆都在哪里?
  3. 当我做ldconfig -p | grep <libraryname>时,对于上面的库,有时我会发现类似于下面的输出,有时什么都没有,为什么呢?
  4. target_link_libraries是否也足够聪明地查找子目录下的库?我的意思是,我看到有些只是在user/lib下,而有些则是在/usr/lib/arm-linux-gnueabihf这样的

pi@raspberrypi:~ $ ldconfig -p _ grep curl libcurl.so.4 (libc6,硬浮动) => /usr/lib/arm-linux-gnueabihf/libcurl.so.4 libcurl-gnutls.so.4 (libc6,硬浮动) => pi@raspberrypi:~ $ ldconfig -p -p grep wiringPi libwiringPiDev.so (libc6,硬浮动) => /usr/local/lib/libwiringPiDev.so libwiringPiDev.so (libc6,硬浮动) => /usr/lib/libwiringPiDev.so libwiringPi.so (libc6,硬浮动) => /usr/local/lib/libwiringPi.so libwiringPi.so (libc6,硬浮动) => /usr/lib/libwiringPi.so

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-05 20:28:48

  1. 我们是否告诉CMake工具构建wiringPi、序列化程序等,并链接到app(这是在我的代码中创建的可执行文件)?

不完全同意。该命令告诉CMake,库wiringPiserializer等必须在该目标的链接阶段链接到目标'app‘。它对构建库本身没有任何意义,通常人们期望它们已经可用,而不是构建。

  1. 这些图书馆都在哪里?

可能会有变化。编译器有一个默认目录列表,它在其中查找库。其他CMake命令可以添加将目录添加到该列表中的链接选项。

  1. 当我做ldconfig -p | grep <libraryname>时,对于上面的库,有时我会发现类似于下面的输出,有时什么都没有,为什么呢?

ldconfig报告动态链接器已知的库。这与编译时运行的链接器不同,它们所知道的目录和库并不一定相同。ldconfig可能没有列出给定库的原因包括:

  1. 未安装库。
  2. 只安装了库的静态版本。
  3. 库不在动态链接器默认检查的任何位置(程序启动时可以至少以两种不同的方式指定其他目录)。

  1. target_link_libraries是否也足够聪明地查找子目录下的库?我的意思是,我看到一些只是在user/lib下,而有些是在/usr/lib/arm-linux-gnueabihf下的一个层次。

这不是CMake的函数,而是选择的工具链及其配置(在Linux上,这通常是GNU工具链,特征是GCC)。通常可以安全地假定工具链默认使用所有正确的标准库目录。CMake有时也可以成功地被指示在其他可能的地方搜索特定的库,但是target_link_libraries并不是其中的一部分。

票数 3
EN

Stack Overflow用户

发布于 2018-09-05 20:36:03

当您向target_link_libraries传递一个非目标的普通名称(而不是路径)时,CMake只是将该名称转换为链接器标志。在Linux上,这是标志

代码语言:javascript
复制
-l<library-name>

因此,关于搜索库的问题,您可以直接向链接器- CMake是在这里的游戏。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52192619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档