我是Linux新手。我在我的CMakeLists.txt中看到了以下几点;
target_link_libraries(app wiringPi
serializer
iothub_client
iothub_client_mqtt_transport
umqtt
aziotsharedutil
ssl
crypto
curl
pthread
m
ssl
crypto)我的问题[理解]是这样做的
ldconfig -p | grep <libraryname>时,对于上面的库,有时我会发现类似于下面的输出,有时什么都没有,为什么呢?/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
发布于 2018-09-05 20:28:48
不完全同意。该命令告诉CMake,库wiringPi、serializer等必须在该目标的链接阶段链接到目标'app‘。它对构建库本身没有任何意义,通常人们期望它们已经可用,而不是构建。
可能会有变化。编译器有一个默认目录列表,它在其中查找库。其他CMake命令可以添加将目录添加到该列表中的链接选项。
ldconfig -p | grep <libraryname>时,对于上面的库,有时我会发现类似于下面的输出,有时什么都没有,为什么呢?ldconfig报告动态链接器已知的库。这与编译时运行的链接器不同,它们所知道的目录和库并不一定相同。ldconfig可能没有列出给定库的原因包括:
user/lib下,而有些是在/usr/lib/arm-linux-gnueabihf下的一个层次。这不是CMake的函数,而是选择的工具链及其配置(在Linux上,这通常是GNU工具链,特征是GCC)。通常可以安全地假定工具链默认使用所有正确的标准库目录。CMake有时也可以成功地被指示在其他可能的地方搜索特定的库,但是target_link_libraries并不是其中的一部分。
发布于 2018-09-05 20:36:03
当您向target_link_libraries传递一个非目标的普通名称(而不是路径)时,CMake只是将该名称转换为链接器标志。在Linux上,这是标志
-l<library-name>因此,关于搜索库的问题,您可以直接向链接器- CMake是在这里的游戏。
https://stackoverflow.com/questions/52192619
复制相似问题