C程序编译错误:参考main

空想家

我是C编程新手,需要帮助解决编译问题:

有3个.c文件(main.c,file1.c,file2.c),file1.c和file2.c仅包含在main.c中调用的函数定义。当我尝试使用以下命令编译main.c文件时,出现以下错误:

 gcc -Wall ./trigger-solve/main.c

  _approx_help", referenced from:
  _print_help in main-9e2c6e.o
  "_approximate", referenced from:
  _main in main-9e2c6e.o
  "_free_matrix", referenced from:
  _main in main-9e2c6e.o
  "_print_matrix", referenced from:
  _main in main-9e2c6e.o
  "_read_matrix", referenced from:
  _main in main-9e2c6e.o
  "_read_sparse_matrix", referenced from:
  _main in main-9e2c6e.o 
  ld: symbol(s) not found for architecture x86_64
   clang: error: linker command failed with exit code 1 (use -v to see invocation)

但是,在阅读了此错误之后,我发现了发生的原因,因为file1.c和file2.c不包含main函数。所以我在两个文件中都添加了这个主要功能:

   int main()
   {
     return 1;
    }

此时,当我编译file1.c和file2.c时,它们不会给我错误,但是在运行main.c时,我仍然遇到相同的编译错误。我也不知道在编译file1.c和file2.c之后如何将它们链接到main.c?

有人可以帮忙吗?

克瑞克SB

您需要将所有翻译单元链接在一起。也许一次清洗,就像这样:

gcc -Wall main.c file1.c file2.c

现在,您已经有了一个可执行文件,a.out可以随时使用。

当然,每次更改一个文件时都无法重建整个项目,因此通常您需要分别编译每个TU,然后在最后一步链接所有内容(并为输出文件起一个更好的名称):

gcc -Wall -c main.c
gcc -Wall -c file1.c
gcc -Wall -c file2.c

gcc -o myprog main.o file1.o file2.o

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章