最近项目正经历着一次更新,一系列编译工具都进行了大版本的升级,随时而来的是,原本正常编译的代码出现了大量的warning,最终编译失败,其中一个问题困扰了比较长的时间,虽然fix的方法不难,但是一直不清楚根本原因,通过大量的google,终于找到的原因,特地记录一下。 先把主要的参考文章写一下: 主要是下面这行错误:
场景是:
那么问题来了,如果bin_c中调用了函数foo(),那么编译能不能通过? PS:检查binutils的版本,方法很简单:
这样做的好处在于当libA有变化,甚至foo接口发生变化时,编译时就能报错。 另外,还以一个ld的选项--allow-shlib-undefined,作用是允许在动态库中存在未解析到的函数symbol,至于理由可以自行查看man ld,因为有些项目就是在运行时才能决定使用的动态库, ld的manual中也举了一个相应的例子。 时间仓促,没有贴代码上来,而且一定还有没有深入到的地方,日后再来完善,如果有不对的地方,欢迎指正! |
|