gcc引用外部动态库时包含了其中没有引用的头文件,为什么要为它买单?

kipade 发布于 2017/08/31 14:43
阅读 14
收藏 0

动态库B引用了动态库A,B中的一个代码文件b.c包含了A中的一个头文件a.h,但是没有引用到a.h中的任何函数接口。但是,在b.c生成的.o文件里却有a.h中接口引用,最终也被反映在动态库B的这个so上了,最终导致B的用户C在链接时抱怨B找不到引用(是在a.h中声明的inline函数,因为B中并未实际引用所以不会有相应的代码)

请问,此类问题在编译器角度该如何处理?

加载中
0
k
kipade

好久也没人回复这个问题。现在终于也是弄明白了,所以自己给自己回复一个希望其他人遇到这类问题后不再迷惑。

原因是A库编译的时候使用了预编译头,B没有明确使用,C这个可执行程序又使用了,然后就出错了。去掉预编译头,就OK了

返回顶部
顶部