g ++与lib有未引用的函数错误

时间:2015-02-02 02:49:55

标签: c++ linux gcc

该项目有三个文件,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

1 个答案:

答案 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内的对象中搜索。