使用gcc禁止默认库路径

时间:2011-09-21 01:30:25

标签: c gcc

有没有办法用gcc禁止默认的库路径搜索? -nostdinc为包含路径搜索执行此操作,但-nostdlib(通过省略或设计)仅禁止-lc -lgcc等但不禁止库搜索路径。

4 个答案:

答案 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环境变量?

如果我正确理解了这个问题,你想要做一些事情,比如强制链接器在默认路径之前查看本地库路径,这样你就可以显式设置该变量来控制顺序。