This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器:链接器库系统搜索路径 ti-processor-sdk-linux-am437x-evm-02.00.00.00

Guru**** 2952510 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/957603/compiler-linker-library-system-search-path-ti-processor-sdk-linux-am437x-evm-02-00-00-00

工具/软件:TI C/C++编译器

我正在开发  一款使用 ti-processor-sdk-linux-am437x-evm-02.00.00.00创建的较旧产品。 在调试中、我在名为 SG5BoardTest 的程序上运行链接器 ld-2.19-2014.08-1-git.so、使用 LD_debug=libs、并找到:

$ LD_debug=libs ./ld-2.19-2014.08-1-git.so ./SG5BoardTest ram
371:find library=librt.so.1 [0];正在搜索

371:搜索缓存=/etc/ld.so.cache
371:搜索路径=/usr/lib/tls/v7l/neon/vfp:/usr/lib/tls/v7l/neon:/usr/lib/tls/v7l/vfp:/usr/lib/tls/v7l:/usr/lib/tls/neon/vfp:/usr/lib/tls/neon:/usr/lib/tls/vfp:/usr/lib/tls:/usr/lib/v7l/neon/vfp:/usr/lib/v7l/neon:/usr/lib/v7l/vfp:/usr/lib/v7l:/usr/lib/neon/vfp:/usr/lib/neon:/usr/lib:/usr/lib/vfp:(系统搜索路径)

这些目录不存在于主机或目标上、并且似乎不在/etc/ld.so.cache 或我正在执行的 elf 文件中。

SG5BoardTest 程序是使用构建的

arm-linux-gnueabihf-gcc -i${user_common_DIR}SG5BoardTest.c ${user_common_DIR}/iouUtilities.c ${user_common_DIR}/CellModem.c -lt -o SG5BoardTest

我的问题是、这些/usr/lib/tls 目录是如何进入我的搜索路径的、以及如何控制链接器系统搜索路径?

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Mark、您好!

    Processor SDK Linux v2.0多年前发布、在此论坛上不再受支持。 您能否尝试使用最新的 SDK 版本来查看行为是否仍然相同?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bin、

    感谢您的快速响应。 我使用最新下载的 SDK 06.03.00构建相同的程序、并使用 SDK 06.03.00中的加载程序在目标上进行了测试、结果类似:

    $ LD_debug=libs./ld-2.28.so ./SG5BoardTest6 ram
    1218:查找 library=librt.so.1 [0];正在搜索
    1218:搜索高速缓存=/etc/ld.so.cache
    1218:搜索路径=/lib/tls/v7l/neon/vfp:/lib/tls/v7l/neon:/lib/tls/v7l/vfp:/lib/tls/v7l:/lib/tls/neon/vfp:/lib/tls/neon:/lib/tls/vfp:/lib/tls:/lib/v7l/neon/vfp:/lib/v7l/neon:/lib/v7l/vfp:/lib/v7l:/lib/neon/vfp:/lib/neon:/lib/vfp:/lib:/usr/lib/tls/v7l/neon/vfp:/usr/lib/tls/v7l/neon:/usr/lib/tls/v7l/vfp:/usr/lib/tls/v7l:/usr/lib/tls/neon/vfp:/usr/lib/tls/neon:/usr/lib/tls/vfp:/usr/lib/tls:/usr/lib/v7l/neon/vfp:/usr/lib/v7l/neon:/usr/lib/v7l/vfp:/usr/lib/vfp:/usr/lib/neon:/usr/lib/v7l:/usr/lib/neon/vfp:/usr/lib::::::::::(系统搜索路径)

    这并不是什么大问题;我正在设置一个新的根文件系统、当我注意到这个奇怪的搜索路径时、请确保库位于正确的位置。 我只是很好奇。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Mark、您好!

    我没有确切的答案(因为我是一个内核人员、几乎不进行用户空间编程...)、但我认为这个搜索路径是针对程序运行时链接库的、所以所有路径都以'/lib/'或'/usr/lib /'开头、 这应该是目标文件系统上的目录布局、而不是" 主机上的/{、USR}/lib/'。 希望这是有道理的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Bin。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    再次感谢。 正如我说过的、这不是一个大问题。 如果无法控制库搜索路径、我始终可以从路径中的第一个目录链接到我的实际库目录。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为答案是所有链接器都使用该构建路径。  请参阅 lists.linaro.org/.../005364.html

    相关部分为:

    您好 Barry、这是动态链接器已知的有意行为。
    >>
    默认情况下、它会搜索 TLS 目录中的库(glibc
     >开发人员打算删除此内容、因为 Linux 线程现已消失、NPTL
     >是标准配置、但没有人会这样做)、然后目录
    >基于 CPU、 然后是基于
    平台的硬件>功能(对于'arm'为 at_HWCAP)的不同组合的目录。
    >这就是您看到它搜索不同目录变体的原因。 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的更新。 这很有帮助。