Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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
Linux 了解目标链接库_Linux_Ubuntu_Cmake - Fatal编程技术网

Linux 了解目标链接库

Linux 了解目标链接库,linux,ubuntu,cmake,Linux,Ubuntu,Cmake,我是Linux新手。我在CMakeLists.txt中看到以下内容: target_link_libraries(app wiringPi serializer iothub_client iothub_client_mqtt_transport umqtt

我是Linux新手。我在CMakeLists.txt中看到以下内容:

  target_link_libraries(app wiringPi
                          serializer
                          iothub_client
                          iothub_client_mqtt_transport
                          umqtt
                          aziotsharedutil
                          ssl
                          crypto
                          curl
                          pthread
                          m
                          ssl
                          crypto)
我的问题/理解是:;通过这样做

  • 我们是否在告诉CMake工具构建wiringPi、序列化程序等并链接到应用程序(这是在我的代码中创建的可执行文件)
  • 这些图书馆都在哪里
  • 当我为上述库执行
    ldconfig-p | grep
    时 有时我发现输出如下,有时什么都没有,为什么
  • 目标链接库是否足够聪明,可以在 还有子目录吗?我的意思是我看到有些人就在下面 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,硬浮点)=>/usr/lib/arm-linux-gnueabihf/libcurl-gnutls.so.4

    pi@raspberrypi:~$ldconfig-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

  • 我们是否在告诉CMake工具构建wiringPi、序列化程序等并链接到应用程序(这是在我的代码中创建的可执行文件)
  • 不完全是。该命令告诉CMake,库
    wiringPi
    序列化程序
    等必须在该目标的链接阶段链接到目标“app”。它并没有提到图书馆本身的建设,通常情况下,人们期望图书馆已经可用,而不是建成

  • 这些图书馆都在哪里
  • 它可以变化。编译器有一个默认目录列表,在其中查找库。其他CMake命令可以添加链接选项,将目录添加到该列表中

  • 当我执行
    ldconfig-p | grep
    时,对于上述库,有时我会发现如下输出,有时 没什么,为什么
  • ldconfig
    报告动态链接器已知的库。这与在编译时运行的链接器不同,而且两者所知道的目录和库也不一定相同。
    ldconfig
    无法列出给定库的原因包括:

  • 库未安装
  • 只安装了库的静态版本
  • 默认情况下,库不在动态链接器检查的任何位置(启动程序时,可以至少以两种不同的方式指定其他目录)
  • 目标链接库是否足够聪明,可以在子目录下查找库?我的意思是,我看到一些在
    user/lib
    下,有些在
    /usr/lib/arm-linux-gnueabihf
  • 这不是CMake的功能,而是所选择的工具链及其配置(在Linux上,通常是GNU工具链,以GCC为特色)。通常可以安全地假设工具链默认使用所有正确的标准库目录。CMake有时也可以被成功地指示在其他可能的地方搜索特定的库,但是
    target\u link\u库
    不是其中的一部分

  • 我们是否在告诉CMake工具构建wiringPi、序列化程序等并链接到应用程序(这是在我的代码中创建的可执行文件)
  • 不完全是。该命令告诉CMake,库
    wiringPi
    序列化程序
    等必须在该目标的链接阶段链接到目标“app”。它并没有提到图书馆本身的建设,通常情况下,人们期望图书馆已经可用,而不是建成

  • 这些图书馆都在哪里
  • 它可以变化。编译器有一个默认目录列表,在其中查找库。其他CMake命令可以添加链接选项,将目录添加到该列表中

  • 当我执行
    ldconfig-p | grep
    时,对于上述库,有时我会发现如下输出,有时 没什么,为什么
  • ldconfig
    报告动态链接器已知的库。这与在编译时运行的链接器不同,而且两者所知道的目录和库也不一定相同。
    ldconfig
    无法列出给定库的原因包括:

  • 库未安装
  • 只安装了库的静态版本
  • 默认情况下,库不在动态链接器检查的任何位置(启动程序时,可以至少以两种不同的方式指定其他目录)
  • 目标链接库是否足够聪明,可以在子目录下查找库?我的意思是,我看到一些在
    user/lib
    下,有些在
    /usr/lib/arm-linux-gnueabihf

  • 这不是CMake的功能,而是所选择的工具链及其配置(在Linux上,通常是GNU工具链,以GCC为特色)。通常可以安全地假设工具链默认使用所有正确的标准库目录。CMake有时也可以被成功地指示在其他可能的位置搜索特定的库,但是
    target\u link\u libraries
    不是其中的一部分。

    当您传递给
    target\u link\u libraries
    一个不是目标的普通名称(不是路径)时,CMake只会将该名称转换为链接器标志。例如,在Linux上,这是一个标志

    -l<library-name>
    
    -l
    
    因此,有关搜索库的问题,您可以直接向链接器提出-CMake在此退出游戏。

    当您通过时