该项目有三个文件,main.c,file1.c和file2.c
gcc -o main.o -c main.c gcc -o file1.o -c file1.c gcc -o file2.o -c file2.c
方法1,效果很好
g++ -o main.exe main.o file1.o file2.o
方法2,失败
ar rv lib.a file1.o file2.o g++ -o main.exe lib.a main.o
main.c:(.text+0xa): undefined reference to `ini_load'
命令有什么问题吗? THX
答案 0 :(得分:2)
命令行中的位置很重要。
当您在命令行中列出库时,它用于满足当时存在的中未解析的引用。来自gcc
手册页:
在您编写此选项的命令中,它会有所不同;链接器按照指定的顺序搜索和处理库和目标文件。因此,
foo.o -lz bar.o
在文件z
之后搜索库foo.o
,但在bar.o
之前搜索。如果bar.o
引用z
中的函数,则可能无法加载这些函数。
如果您将其更改为:
g++ -o main.exe main.o lib.a
然后它应该可以正常工作,因为mian.o
中的所有未解析的引用都将在lib.a
内的对象中搜索。