gcc/clang是否可以为不同的c++;版本? 我想知道,如果有可能在位置安装库,这样GCC/CLAN只在使用特定C++语言时使用它们。 有特定的C++版本,如:-STD= C++ 98,-STD= C++ 03,-STD= C++ 11,-GNU+++,……/P>
我在这里提问,因为我想为旧的c++03和c++11安装库boost 1.56。 显然,当使用c++11或c++03时,对象文件/库文件使用不同的ABI,因此我必须为每个语言版本安装Boostgcc/clang是否可以为不同的c++;版本? 我想知道,如果有可能在位置安装库,这样GCC/CLAN只在使用特定C++语言时使用它们。 有特定的C++版本,如:-STD= C++ 98,-STD= C++ 03,-STD= C++ 11,-GNU+++,……/P>,c++,C++,我在这里提问,因为我想为旧的c++03和c++11安装库boost 1.56。 显然,当使用c++11或c++03时,对象文件/库文件使用不同的ABI,因此我必须为每个语言版本安装Boost 其他信息: 我正在使用LinuxMint17和GCC4.8.2和Clang3.5.1编译器 我已经为gcc和clang构建了boost库。 现在我想尝试一下C++11语言提供的一些新特性 某个地方,我读过,如果编译的库是用不同的C++版本编译的,如果它严重依赖于标准C++库,那么编译是不安全的。 因为Bo
其他信息: 我正在使用LinuxMint17和GCC4.8.2和Clang3.5.1编译器 我已经为gcc和clang构建了boost库。 现在我想尝试一下C++11语言提供的一些新特性
某个地方,我读过,如果编译的库是用不同的C++版本编译的,如果它严重依赖于标准C++库,那么编译是不安全的。
因为Boost依赖C++标准库,所以我需要每个C++版本的另一个Boost库。 我想要什么:
如果编译器仅使用正确的boost库,这将非常方便,具体取决于std编译器选项:- std=c++03=>选择boost_atomic_gcc4.8.2_c++03.so
- std=c++11=>选择boost_atomic_gcc4.8.2_c++11.so
<>我们至少有C++运行时的行为,因为GCC根据STD选项选择正确的运行时。 我认为最简单的解决方案可能是从构建系统中执行此操作。如果使用GNU Make,这可能会起作用:
ifdef ELEVEN
CXXFLAGS += -std=c++11
LDFLAGS += -L/path/to/boost-c++11
else
CXXFLAGS += -std=c++03
LDFLAGS += -L/path/to/boost-c++03
endif
在microsoft编译器上,您可以检查_MSC_FULL_VER,并执行ifdef pragma lib()。不确定GCC是否有类似的宏,因为ITI相信它可以用GCC的Script文件,但是它会带来严重的维护问题。所以,要清楚,你有不同的项目,你想使用不同版本的Boost,你想选择哪一个基于C++的版本?这是在Linux、Windows、OSX还是其他平台上?