Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gcc/clang是否可以为不同的c++;版本? 我想知道,如果有可能在位置安装库,这样GCC/CLAN只在使用特定C++语言时使用它们。 有特定的C++版本,如:-STD= C++ 98,-STD= C++ 03,-STD= C++ 11,-GNU+++,……/P>_C++ - Fatal编程技术网

gcc/clang是否可以为不同的c++;版本? 我想知道,如果有可能在位置安装库,这样GCC/CLAN只在使用特定C++语言时使用它们。 有特定的C++版本,如:-STD= C++ 98,-STD= C++ 03,-STD= C++ 11,-GNU+++,……/P>

gcc/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

我在这里提问,因为我想为旧的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++库,那么编译是不安全的。

因为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还是其他平台上?