有没有办法用gcc禁止默认的库路径搜索? -nostdinc
为包含路径搜索执行此操作,但-nostdlib
(通过省略或设计)仅禁止-lc -lgcc
等但不禁止库搜索路径。
答案 0 :(得分:22)
你应该可以用spec files做到这一点(虽然摆弄这些对我来说似乎是一种黑暗的艺术......)。
如果查看gcc -dumpspecs
的输出,link_command
规范是构建调用的实际命令的规范。挖掘它引用的一些其他规范,link_libgcc
规范,通常定义(至少对于本地编译器):
*link_libgcc:
%D
是罪魁祸首:
%D
为GCC认为可能包含启动文件的每个目录转储-L选项。如果目标支持multilibs,那么当前的multilib目录将被添加到这些路径中的每一个。
您可以通过创建替换您选择的路径的文件(例如my.specs
)来覆盖它:
*link_libgcc:
-L/foo/bar -L/blah/blah
然后将-specs=my.specs
传递给gcc
。
答案 1 :(得分:1)
假设底层加载器为ld
,您可以使用
--sysroot=directory
(我不记得你必须用来将加载器参数传递给gcc的选项,但有一个......)
你可以让“目录”成为虚假的东西,没有找到任何库,或者模仿你自己项目的目录布局。
答案 2 :(得分:0)
您可以尝试-nodefaultlibs以避免使用所有默认库,然后使用-L和-l在所需目录中添加所需的库。 在命令行中使用-L选项指定的目录应优先于默认目录。
答案 3 :(得分:0)
如何设置LIBRARY_PATH
环境变量?
如果我正确理解了这个问题,你想要做一些事情,比如强制链接器在默认路径之前查看本地库路径,这样你就可以显式设置该变量来控制顺序。