为什么某些机器上需要“-static”标志而另一台机器上禁止使用“-static”标志?

时间:2015-10-15 08:44:13

标签: c++ gcc cmake static-libraries static-linking

我面临一个奇怪的问题,我不知道如何解决它。

由于CMake的ExternalProject_Add功能,我开发了一个能够下载和安装第三方库的代码。我用GCC 4.9.2编译我的代码,一切正常。这是我使用的标志:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -std=c++11 -fopenmp -lgfortran -Wno-deprecated")

在另一台机器上(相同的Ubuntu 12.04系统),它不适用于GCC 5:我使用第三方库(cppunit)获得了一些未定义的引用。错误消息是用法语写的(对不起,我很抱歉)。例如,我得到

  

test_simol.cpp :(。text + 0x49):référenceindéfinievers«CppUnit :: TestFactoryRegistry :: getRegistry(std :: __ cxx11 :: basic_string,std :: allocator> const&)»

我找到了解决问题的方法:在gcc标志中添加“-static”。但是,如果我这样做,我会在第一台机器上收到错误消息。

有人可以解释一下这里发生了什么,以及如何使用适用于所有机器的解决方案来解决问题?我不太清楚这里“-static”旗帜扮演的角色。

注意:问题可能来自GCC,但我无法预测用户将使用哪个版本的GCC。

谢谢!

编辑:添加-std = c ++ 11标志

0 个答案:

没有答案