强制gcc使用一个链接器而不是另一个链接器

强制gcc使用一个链接器而不是另一个链接器,gcc,linker,ld,dyld,Gcc,Linker,Ld,Dyld,最近我一直在操作系统X上工作。有一段时间事情进展得很顺利,直到ld进入我的系统,现在gcc不再使用dyld。此外,我所有的共享库都是*.dylib格式的,而ld完全忽略了它的存在。如果我从PATH找到mvld,gcc只是抱怨它找不到ld 请帮助我让gcc回到正轨,并使用它应该使用的功能。您可以尝试一些gcc选项。从: -c编译或汇编源文件,但不链接。链接 这个阶段根本没有结束。最终输出的形式为 每个源文件的对象文件。 然后,您可以使用所需的任何链接器显式链接 将ld符号链接到dyld有帮助吗 m

最近我一直在操作系统X上工作。有一段时间事情进展得很顺利,直到
ld
进入我的系统,现在
gcc
不再使用
dyld
。此外,我所有的共享库都是
*.dylib
格式的,而ld完全忽略了它的存在。如果我从
PATH
找到
mv
ld,gcc只是抱怨它找不到ld


请帮助我让gcc回到正轨,并使用它应该使用的功能。

您可以尝试一些gcc选项。从:

-c编译或汇编源文件,但不链接。链接 这个阶段根本没有结束。最终输出的形式为 每个源文件的对象文件。
然后,您可以使用所需的任何链接器显式链接

将ld符号链接到dyld有帮助吗

mv /usr/bin/ld /usr/bin/ld.old
ln -s /usr/bin/dyld /usr/bin/ld

编辑:固定ld参数顺序

查看
-Xlinker
选项

我从
man gcc


您可以使用一些详细选项(如
-v

)进行双重检查。这不是您的确切问题,但我需要切换到
ld.gold
,因此,gcc的
-fuse ld=gold
选项非常有用。

至少在我的系统上,ln似乎与您指定的方向相反。现在我刚刚写下了dyld,需要再次从苹果抓取它,grumble grumble.lol,你是对的,除非文件已经存在,它不会覆盖它。很抱歉如果不覆盖,您可能是对的。不幸的是,我
取消了链接
ed,这确实完全删除了该文件(这是我在不阅读文档的情况下提前收费得到的)。从苹果下载xCode(获得dyld的唯一方法)需要花费很长时间,我只需要重新启动。一旦我开始工作并且能够验证,我会奖励你这个答案,如果它有效的话,我怀疑它会的。好吧,只要dyld接受相同的参数。我正在研究如何改变gcc的specs文件以使用其他东西。但是我不确定你的系统在一开始发生了什么,你确定gcc本身没有被替换吗?我考虑过,但对很多人来说,这似乎是一个黑客行为。我喜欢有趣的黑客和短期修复,但从长远来看,他们需要真正可靠的替代品。
mv /usr/bin/ld /usr/bin/ld.old
ln -s /usr/bin/dyld /usr/bin/ld