gcc:允许未定义的符号

我不希望gcc链接器将未定义的符号显示为链接错误。 我在MAC OSX 10.6上使用gcc 4.2

当然我在线寻找解决方案,但所有的尝试都失败了!

如何修改此命令以摆脱未定义的符号错误?

gcc -o Proj $(wildcard *.o); 

谢谢。

编辑:我正在研究一个研究项目,我需要代码可以链接,我不在乎它是否会有运行时exception

咦? 这是没有意义的。 这一个错误,不容忽视。 当链接器无法完成其工作时,您无法构建可执行文件。 您是否希望它只是简单地发明一个实现并希望它能够实现?

相反,您需要了解如何正确配置要构建的项目。 如果依赖外部库,则需要在链接器搜索路径中添加路径。

编辑:根据你的评论……

有一些选项可以抑制链接错误,比如这里的sourceware.org/binutils/docs/ld/Options.html我正在研究一个研究项目,我需要代码可链接而且我不在乎它是否会有运行时exception

嗯,你仍然不能,它仍然没有任何意义。 更仔细地阅读该部分:

在链接时指定的共享库中允许未定义的符号引用的原因是:

链接时指定的共享库可能与加载时可用的共享库不同,因此该符号实际上可以在加载时解析。 有一些操作系统,例如BeOS和HPPA,共享库中的未定义符号是正常的。

因此,在某些情况下,允许在共享库中使用未定义的符号是合理的,因为您可能没有链接到您将在实践中链接到的动态库的相同版本。

但是,您希望构建可执行文件,而不是共享库,因此执行您要求的操作毫无意义 。 你只是有一个可执行的borked,将无法正常工作。 为什么任何理智的编译器都允许这样的条件?

您可以使用ld -r -o Proj.o $(wildcard *.o)代替。
您将获得的不是您可以运行的可执行文件,而是一个目标文件,您可以将其链接到可执行文件中。 在最后的链接中,您必须提供未解析的符号。

您可能想要创建一个库而不是exe。 这些不应该生成链接器错误。

 ar r libProj.a $(wildcard *.o) ranlib libProj.a