【问题标题】:GCC compiler multiple files issuesGCC编译器多文件问题
【发布时间】:2016-01-19 17:19:29
【问题描述】:

我有一个已编译的 C 文件,名为 Hello.o。在 Hello.o 中: 我有一个主要功能 和一个名为 int myfunc() 的函数。

我想知道我是否要创建一个新文件 hello2.c,它也包含一个 main 函数,并在 hello2.c 的顶部声明 myfunc, 我可以使用 gcc 命令编译 hello2.c 并将 hello.o 链接到它吗?

提前谢谢大家。

【问题讨论】:

  • 如果你有两个同名的全局函数,你会得到链接器错误。
  • 如果可以,您希望生成的程序做什么?

标签: c linux gcc linker


【解决方案1】:

如果您只想在 hello2.c 中使用 myfunc(),您可以尝试使用 gcc 链接两个对象文件。在头文件 Hello.h 中声明该函数并将其包含在 hello2.c 中并生成 Hello.o 和hello2.c 在将它们链接在一起之前 $ gcc -o 输出 Hello.o hello2.o

我认为这应该对你有帮助

How do I link object files in C? Fails with "Undefined symbols for architecture x86_64"

【讨论】:

    【解决方案2】:

    目标文件完全链接,或者根本没有链接。所以这行不通。

    GCC 将命令行中指定的所有文件作为 .o 添加到二进制文件中。然后使用库 (.a) 来查找所需的符号。

    如果有重复符号,则报错。 (它不知道哪个主要)。

    如果一个库包含多个 .o 文件,它可以忽略不需要的 .O 文件。这些可能与二进制文件有重复。

    【讨论】:

      猜你喜欢
      • 2020-09-22
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多