fak*_*ken 82
您可以通过执行以下命令来执行此操作:
ld --verbose | grep SEARCH_DIR | tr -s ' ;' \\012
Run Code Online (Sandbox Code Playgroud)
gcc将一些额外的-L路径传递给链接器,您可以使用以下命令列出:
gcc -print-search-dirs | sed '/^lib/b 1;d;:1;s,/[^/.][^/]*/\.\./,/,;t 1;s,:[^=]*=,:;,;s,;,; ,g' | tr \; \\012
Run Code Online (Sandbox Code Playgroud)
建议使用ld.so.conf和ldconfig的答案不正确,因为它们引用运行时动态链接器搜索的路径(即每当执行程序时),这与ld搜索的路径不同(即每当一个程序是链接的).
tel*_*ium 76
在Linux上,你可以使用ldconfig,其保持ld.so配置和高速缓存,打印出的目录搜索通过ld.so与
ldconfig -v 2>/dev/null | grep -v ^$'\t'
Run Code Online (Sandbox Code Playgroud)
ldconfig -v打印出链接器的目录搜索(没有前导选项卡)和在这些目录中找到的共享库(带有前导选项卡); 将grep得到的目录.在我的机器上,这行打印出来
/usr/lib64/atlas:
/usr/lib/llvm:
/usr/lib64/llvm:
/usr/lib64/mysql:
/usr/lib64/nvidia:
/usr/lib64/tracker-0.12:
/usr/lib/wine:
/usr/lib64/wine:
/usr/lib64/xulrunner-2:
/lib:
/lib64:
/usr/lib:
/usr/lib64:
/usr/lib64/nvidia/tls: (hwcap: 0x8000000000000000)
/lib/i686: (hwcap: 0x0008000000000000)
/lib64/tls: (hwcap: 0x8000000000000000)
/usr/lib/sse2: (hwcap: 0x0000000004000000)
/usr/lib64/tls: (hwcap: 0x8000000000000000)
/usr/lib64/sse2: (hwcap: 0x0000000004000000)
Run Code Online (Sandbox Code Playgroud)
没有hwcap在行中的第一个路径是内置的或从/etc/ld.so.conf读取.然后,链接器可以在基本库搜索路径下搜索其他目录,其名称sse2与其他CPU功能相对应.这些路径hwcap可以包含为这些CPU功能量身定制的附加库.
最后一点:使用-p而不是-v上面的搜索ld.so缓存.
Mat*_*ery 66
我不确定是否有任何选项可以简单地打印完整的有效搜索路径.
但是:搜索路径由-L命令行上的选项指定的目录组成,后跟由SEARCH_DIR("...")链接描述文件中的指令添加到搜索路径的目录.所以如果你能看到这两个,你可以解决它,你可以做如下:
如果您ld直接调用:
-L选项是无论你说他们是.--verbose选项.寻找SEARCH_DIR("...")指令,通常靠近输出的顶部.(请注意,对于每次调用,这些都不一定相同ld- 链接器具有许多不同的内置默认链接描述文件,并根据各种其他链接器选项在它们之间进行选择.)如果您通过gcc以下方式链接:
-v选项传递给gcc它,以便它显示它如何调用链接器.实际上,它通常不会ld直接调用,而是通过一个名为collect2(它位于其内部目录之一)的工具间接调用,而该工具又会调用ld.这将显示-L正在使用的选项.-Wl,--verbose到gcc选项使之通过--verbose通过对连接器,看到上述的链接脚本.小智 28
我在Linux上找到的gcc和clang最兼容的命令(感谢armando.sano):
$ gcc -m64 -Xlinker --verbose 2>/dev/null | grep SEARCH | sed 's/SEARCH_DIR("=\?\([^"]\+\)"); */\1\n/g' | grep -vE '^$'
Run Code Online (Sandbox Code Playgroud)
如果你给-m32,它将输出正确的库目录.
我机器上的例子:
用于g++ -m64:
/usr/x86_64-linux-gnu/lib64
/usr/i686-linux-gnu/lib64
/usr/local/lib/x86_64-linux-gnu
/usr/local/lib64
/lib/x86_64-linux-gnu
/lib64
/usr/lib/x86_64-linux-gnu
/usr/lib64
/usr/local/lib
/lib
/usr/lib
Run Code Online (Sandbox Code Playgroud)
用于g++ -m32:
/usr/i686-linux-gnu/lib32
/usr/local/lib32
/lib32
/usr/lib32
/usr/local/lib/i386-linux-gnu
/usr/local/lib
/lib/i386-linux-gnu
/lib
/usr/lib/i386-linux-gnu
/usr/lib
Run Code Online (Sandbox Code Playgroud)
问题是标记为Linux,但也许这在Linux下也能正常工作?
gcc -Xlinker -v
Run Code Online (Sandbox Code Playgroud)
在Mac OS X下,打印:
@(#)PROGRAM:ld PROJECT:ld64-224.1
configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 armv6m armv7m armv7em
Library search paths:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/lib
Framework search paths:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/
[...]
Run Code Online (Sandbox Code Playgroud)
上面的-Xlinker选项gcc只是传递-v给ld.然而:
ld -v
Run Code Online (Sandbox Code Playgroud)
不打印搜索路径.
| 归档时间: |
|
| 查看次数: |
154051 次 |
| 最近记录: |