前提说明:
web_transmit_service是一个传输管理程序,内嵌rayvision引擎和aspera引擎,其中引擎是静态库,两个引擎封装的接口特别相似
出现问题:
vector异常,push_back()执行5次,但size()却是3,而且遍历出的结果与push进去的内容是不一样的,
另外,只链接一个引擎时就是正常的,同时链接两个引擎才会执行异常,
而且,windows下是正常的,虽然它用的是动态库(只是表达代码本身没问题的意思)
问题处理:
mac下,
将引擎由静态库改成动态库,不再有异常
linux(Ubuntu14.4、CentOS6.5)下,
将引擎由静态库改成动态库,也不再有异常
但由于动态库依赖,导致程序安装比较麻烦(安装机器缺少依赖库),所以,还是保持静态库,不过编译引擎时去掉了“-O1”的编译优化项
----------------------------------------------------------------------------------
其他:
mac下,编译aspera引擎时,发现IBM给的静态库和我的代码不能正常链接,原因是他们的编译选项中有“-stdlib=libstdc++”这个选项,而我的代码用的是“-std=c++11”,两个用的底层的STL是不一样的,导致一系列的链接问题
其实,我们默认的编译选项是“-stdlib=libc++”,而它用的是默认的STL,而“-stdlib=libstdc++”,用的是另一个版本的STL,所以,才有问题。(-std=c++11也相当于内嵌有一个"-stdlib=libc++"这样的选项,不管我表达的对不对,我就是想表达这层意思,用的是默认的STL)
最终,IBM那边重新编译了一个静态库给我(改用编译选项“-stdlib=libc++”),接着就出现最前面的执行异常的问题。