C++ 为什么-“静态”;某些机器上需要标记,而另一些机器上禁止标记?

C++ 为什么-“静态”;某些机器上需要标记,而另一些机器上禁止标记?,c++,gcc,cmake,static-libraries,static-linking,C++,Gcc,Cmake,Static Libraries,Static Linking,我正面临一个奇怪的问题,我不知道如何解决它 由于CMake的ExternalProject_Add功能,我开发了一个能够下载和安装第三方库的代码。我用GCC4.9.2编译代码,一切正常。以下是我使用的标志: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -std=c++11 -fopenmp -lgfortran -Wno-deprecated") 在另一台机器上(同样的Ubuntu 12.04系统),它不适用于GCC 5:我使用第

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

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

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -std=c++11 -fopenmp -lgfortran -Wno-deprecated")
在另一台机器上(同样的Ubuntu 12.04系统),它不适用于GCC 5:我使用第三方库(CPPFUnit)获得一些未定义的引用。错误消息是用法语写的(对此我很抱歉)。例如,我

test_simol.cpp:(.text+0x49):référence indéfinie vers«CppUnit::TestFactoryRegistry::getRegistry(std::_cx11::basic_string,std::allocator>const&)»

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

有人能给我解释一下这里发生了什么,以及如何在所有机器上使用解决方案来解决问题吗?我不太清楚“-static”标志在这里扮演的角色

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

谢谢


编辑:add-std=c++11标志

第三方库是否已预编译?在具有GCC版本5的libstdc++中,
std::string
的定义已更改。这是必需的,因为旧的引用计数字符串类不符合C++11。为什么不在不同的计算机上使用相同的gcc版本?(我想如果你说类似于
LANG=make
的话,你可能会得到正常的错误消息。)@5gon12eder:好的观点;可能有一个宏可以设置为获取旧的字符串定义。