我是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?
有人可以帮忙吗?
您需要将所有翻译单元链接在一起。也许一次清洗,就像这样:
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] 删除。
我来说两句