【发布时间】:2011-08-29 09:17:33
【问题描述】:
我被要求重新编译一个相当旧的 EMG 处理库,以便它可以在现代 Mac 上运行,而不是在当前运行的古老 SunOS 工作站上运行。对于一个对 makefile 不是很有经验的人来说,这是一条痛苦的道路,但是在阅读了整个互联网之后,这让我很难过。
makefile(由 imake 生成)为每个源文件调用 gcc,并带有以下参数,但失败并出现“未定义符号”错误:
gcc -I[First Include Path] -I[Second Include Path] -I. -c [File Name].c
gcc -o [Output File Name] [Include a bunch of libraries] -lm
我认为问题的根源是所有#include 语句都使用 用于系统库,包含目录中的 .h 以及与正在编译的 .c 文件位于同一目录中的 .h。我知道这是错误的,但事实就是如此。如果我将它们更改为“”,仅用于与正在编译的 .c 位于同一目录中的 .h,那么一切正常。
当然,我不想为数百个文件单独执行此操作。那么,我是否可以进行一些更改,以便 gcc 在当前目录中查找#include ?从阅读搜索路径开始,我认为默认情况下它不是?
或者我注定要继续我目前的某种黑客工作批量查找和替换的计划?
【问题讨论】:
-
“未定义符号”是链接器错误,而不是编译器错误,因此使用包含路径无济于事。 gcc 甚至搜索
-I目录中包含在<>中的文件。你能发布一个你得到的实际错误的样本吗? -
@Mat 啊,是的,你是对的,我叫错了树,我能够修复链接错误。我之前在该程序的另一部分缺少包含的问题,显然只是假设它再次发生。我还应该更仔细地阅读this 页面,而不是让自己感到困惑。谢谢您,如果您愿意将此作为答案发布,我将很乐意接受。
标签: macos gcc include makefile