【问题标题】:Why do I get a linker error while I try to compile a C file?为什么在尝试编译 C 文件时出现链接器错误?
【发布时间】:2019-11-29 15:26:57
【问题描述】:

这个错误已经有好几周了,我已经发了一篇关于它的帖子,但不是很清楚。
所以我从头文件 myBmpGris.h 调用一个函数,这些函数在文件 myBmpGris.c 上实现。这是我的主要文件:

#include<stdio.h>
#include<stdlib.h>
#include "myBmpGris.h"

int main(){

    char * image_name = "image_carre.bmp";
    BmpImg image = readBmpImage(image_name);

 return 0;


我使用 ggc main.c 进行编译并收到此错误消息:

架构 x86_64 的未定义符号:
“_readBmpImage”,引用自:
_main 在 main-1c453a.o
ld:未找到体系结构 x86_64 的符号
clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

我阅读了很多关于相同错误消息的帖子,但似乎没有一个答案适用于我的情况。我有点绝望,因为我的很多程序都给了我同样的错误。我该怎么办?

【问题讨论】:

  • 包括您的编译方式和使用的参数。
  • 所有其他答案的建议是什么?添加库?您正在使用的功能在哪里实现?请记住:标头不是库......
  • ggc main.c在终端里是怎么写的?在这种情况下,您在编译时会丢失“myBmpGris”的源文件
  • 我在终端写 gcc main.c 编译。
  • 你认为readBmpImage()函数的实现在哪里?

标签: c gcc linker clang


【解决方案1】:

您需要告诉编译器所有包含所需函数的代码文件。

因此,如果您到目前为止已像 gcc main.c 一样编译,那么同时编译另一个文件的最简单方法是 gcc main.c myBmpGris.c

您可能想了解有助于告诉编译器(以及建筑物的其他部分)的其他内容,即可能的命令行参数。或者使用一种可用的免费编程环境。 (我不会说出任何名字。只需在“C IDE free”或类似网站上使用您最喜欢的搜索引擎。前几个点击讨论几个,尝试几个,然后使用您朋友使用的那个,或者您非常喜欢的那个,好多了。)

【讨论】:

    【解决方案2】:

    有两件事。

    1. 您已包含的编译。 h 文件。这意味着编译器将为包含库中所有使用的函数在符号表中输入条目。

    2. 在此处链接链接器尝试从库中获取地址以填充在第一步中创建的符号表。在您的情况下无法执行此操作。所以给出库的完整路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      相关资源
      最近更新 更多