使用gcc禁止默认库路径

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

你应该能够用spec文件做到这一点(虽然摆弄这些对我来说似乎是一种黑暗的艺术……)。

如果查看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

假设底层加载器是ld您可能能够重定向其整个加载路径

 --sysroot=directory 

(我不记得你必须用于将加载器参数传递给gcc的选项,但是有一个……)

你可以让“目录”成为虚假的东西,没有找到任何库,或者模仿你自己项目的目录布局。

您可以尝试使用-nodefaultlibs来避免所有默认库,然后使用-L和-l在所需目录中添加所需的库。 在命令行中使用-L选项指定的目录应优先于默认目录。

如何设置LIBRARY_PATH环境变量?

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