【问题标题】:gcc #include <> and #include "", can I compile without changing one to the other?gcc #include <> 和 #include "",我可以编译而不更改另一个吗?
【发布时间】: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 目录中包含在&lt;&gt; 中的文件。你能发布一个你得到的实际错误的样本吗?
  • @Mat 啊,是的,你是对的,我叫错了树,我能够修复链接错误。我之前在该程序的另一部分缺少包含的问题,显然只是假设它再次发生。我还应该更仔细地阅读this 页面,而不是让自己感到困惑。谢谢您,如果您愿意将此作为答案发布,我将很乐意接受。

标签: macos gcc include makefile


【解决方案1】:

根据我的经验,#include "" 也适用于系统标头。因此,如果您不关心区分本地和系统标头,可以尝试将所有 #include &lt;&gt; 替换为 #include ""

【讨论】:

    猜你喜欢
    • 2019-01-26
    • 2014-08-29
    • 2020-12-13
    • 1970-01-01
    • 2021-10-07
    • 2014-01-24
    • 2012-11-10
    • 2014-01-26
    • 1970-01-01
    相关资源
    最近更新 更多