我面临一个奇怪的问题,我不知道如何解决它。
由于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标志