简单的说,就是
g++ A.o B.o C.o -o a.out和
ar rv libpack.a A.o B.o
g++ C.o libpack.a -o a.out或者
ar rv libpack.a A.o B.o
g++ C.o -o a.out -lpack有什么区别,对最终的行为有什么影响?我只知道.a就是多个.o打个包,然后加个索引之类,但是在输送给g++的时候,有什么影响?
链接器在处理.a文件的时候,会自动忽略那些没有被引用的项,以保证链接结果中没有太多无用的代码
而在处理.o文件的时候,则是你给它什么就链接什么
gtest的使用并没有使用显式的引用,因此会被链接器忽略。gtest具体是如何找到测试用例的就不清楚了,需要看源代码吧。
对这个问题的解决方案有两种:
一开始就不要生成
.a把
.a解开,用一堆.o代替在链接TEST的
.a时,用这个选项-Wl,--whole-archive libtest.a,它可以强制引入libtest.a中的所有符号