我不希望gcc链接器将未定义的符号显示为链接错误。我在MAC OSX 10.6上使用gcc 4.2
当然我在线寻找解决方案,但所有尝试都失败了!
如何修改此命令以摆脱未定义的符号错误?
gcc -o Proj $(wildcard *.o);
感谢。
编辑:我正在开展一个研究项目,在那里我需要代码可链接&我不在乎它是否会有运行时异常
答案 0 :(得分:5)
咦?这是没有意义的。它是错误,不能忽略。当链接器无法完成其工作时,您无法构建可执行文件。您是否希望它只是简单地发明一个实现并希望它能够实现?
相反,您需要了解如何正确配置要构建的项目。如果依赖外部库,则需要在链接器搜索路径中添加路径。
编辑:根据你的评论...
有一些选项可以抑制链接错误,比如这里的sourceware.org/binutils/docs/ld/Options.html我正在研究一个研究项目,我需要这些代码可以链接。我不在乎它是否会有运行时异常
嗯,你仍然不能,它仍然没有任何意义。请仔细阅读该部分:
在链接时指定共享库中允许未定义的符号引用的原因是:
链接时指定的共享库可能与加载时可用的共享库不同,因此该符号实际上可以在加载时解析。 有一些操作系统,例如BeOS和HPPA,共享库中的未定义符号是正常的。
因此,在某些情况下,允许在共享库中使用未定义的符号 是合理的,因为您可能无法链接到您将在实践中链接到的动态库的相同版本。
但是,您希望构建一个可执行文件,而不是共享库,因此毫无意义可以执行您要求的操作。你只需要一个可执行的东西,它将无法使用。为什么任何理智的编译器都允许这样的条件?
答案 1 :(得分:2)
您可以改用ld -r -o Proj.o $(wildcard *.o)
您将获得的不是您可以运行的可执行文件,而是一个目标文件,您可以将其链接到可执行文件中。在最后的链接中,您必须提供未解析的符号。
答案 2 :(得分:0)
您可能想要创建一个库而不是exe。这些不应该生成链接器错误。
ar r libProj.a $(wildcard *.o)
ranlib libProj.a