尝试编译C文件时为什么会出现链接器错误?

时间:2019-11-29 15:26:57

标签: c gcc linker clang

我已经有数周了这个错误,我已经对此发表了一篇文章,但不是很清楚。
因此,我从头文件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 in main-1c453a.o
  ld:找不到架构x86_64的符号
  clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)   

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

2 个答案:

答案 0 :(得分:1)

您需要告诉编译器所有包含任何所需功能的代码文件。

因此,如果到目前为止,您已经像data = { "foo": 5, "bar": 10} l = [] for k in data: l.append(k) l.append(data[k]) print(l) 一样进行编译,那么也可以对其他文件进行编译的最简单方法是gcc main.c

您可能想阅读其他可以帮助告诉编译器(以及建筑物的其他部分)的信息,即可能的命令行参数。或使用可用的免费编程环境之一。 (我不会透露任何名字。只需在“ C IDE free”或类似版本上使用您最喜欢的搜索引擎即可。前几首热门歌曲会讨论几首,然后尝试几首,然后使用您的朋友使用的某个,或者您真正喜欢的一个,好多了。)

答案 1 :(得分:1)

有两件事。

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

  2. 在此处链接,链接器尝试从库中获取地址以填写第一步中创建的符号表。您的情况无法执行此操作。因此,请提供完整的库路径。