aCC编译器怪异的-mt参数

前一段做一个工作流的应用项目,需要在HP安腾主机上编译工作流引擎,编译后引擎经常无故coredump,而且当掉的地方不确定。仔细查看代码确认不是程序的bug。问了一下同事,说是HP的C++模板库有bug,但上网查了查没有这方面的补丁,确认应该不是C++库的问题。既然不是应用的问题也不是C++库的问题,为什么引擎会当掉呢?在Google上漫无边际的浏览,找到了这个,开始怀疑是makefile的编译器参数的问题,但是引擎本身不是多线程的,也没有引用pthread库。抱着“死马当活马医”的态度加上了“-mt”参数,makefile的CFLAG改为+DD64 -AA -D_REENTRANT -mt -w +Z -Wl,+s -D__BIGMSGQUEUE_ENABLED重新编译引擎,一切都正常了。

 

虽然引擎不coredump了,但疑问一直在,又在网上找了找,发现了这个,其中这段

编译器 aCC选项

• 如果多线程程序,需要使用-mt编译选项

• 如果单线程程序,链接了第三方的库(libclntsh.so),也通常需要-mt

• 使用C++新标准,要使用-AA编译选项

• -AA & -AP

 

我们的程序虽然不是多线程的,但是引用 了oracle的库libclntsh.so,所以也需要加-mt,文档也没有说明原因。

你可能感兴趣的:(多线程,oracle,c,浏览器,HP)