代码之家  ›  专栏  ›  技术社区  ›  Vivek Shukla

了解目标链接库

  •  -1
  • Vivek Shukla  · 技术社区  · 6 年前

      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\u link\u库是否足够聪明,可以在下面查找库 子目录也是?我的意思是我看到有些人就在下面 /usr/lib/arm-linux-gnueabihf

    树莓皮:~$ldconfig-p | grep卷曲
    libcurl.so公司.4(libc6,硬浮点)=>/usr/lib/arm linux gnueabihf/libcurl.so公司.4


    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公司

    2 回复  |  直到 6 年前
        1
  •  2
  •   John Bollinger    6 年前
    1. 我们是否告诉CMake工具构建wiringPi、序列化程序等并链接到app(这是在我的代码中创建的可执行文件)?

    不完全是。该命令告诉CMake库 wiringPi , serializer , 等。

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

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

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

    ldconfig 关于已知图书馆的报告 ldconfig配置

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

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

        2
  •  1
  •   Tsyvarev    6 年前

    target_link_libraries 一个不是目标的普通名称(不是路径),CMake只是将这个名称转换成链接器标志。例如,在Linux上,这是一个标志

    -l<library-name>