最近在跟供应商联调,我们需要引用 他们的SDK,动态库。
结果出现一个很奇怪的问题,我们在引用他们的库之后,运行出现段错误,出现的原因大概是c++库中的 std::ifstream 这一类导致的,但是当我们在 main函数中 增加一句定义 “std::ifstream f; ” ,之后,代码就可以正常运行。
排查了大半个月,最终终于有了结果。
我们的代码编译出来是 一个可执行文件 + 一个.so的动态库,
在动态库中会 引用供应商的 多个.so动态库。
我们在写 makefile的时候 先引用了 供应商的库,再引用我们自己的库,就导致了这个问题。
解决办法是 先引用我们自己的库,再引用供应商的库,问题解决。
得出的结论就是:在编译链接动态库的时候,要先链接高级的库,再链接低级的库