尝试从已编译的源文件创建目标文件时出现编译错误。我正在使用c ++ 11附带的标题。我也在使用c ++模式识别库和其他几个包含。
我所做的只是将#include <thread>
添加到我的rbm_test.cc源文件中。
我的编译命令:
g ++ -std = c ++ 11 -O3 -DQUIET -fPIC -pthread -ansi -pedantic -DARCH_INTEL -Wall -W -Wchar-subscripts -Wpointer-arith -Wcast-qual -Wwrite-strings -Wconversion -Wno- old-style-cast -Wctor-dtor-privacy -Wnon-virtual-dtor -I ../ src -I ../ .. -DPATREC -D_ UNIX _ -o rbm_test.o -c ../的src / rbm_test.cc
我得到的编译错误是:
错误:#error此文件需要编译器和库支持 ISO C ++ 2011标准。这种支持目前是实验性的,并且 必须使用-std = c ++ 11或-std = gnu ++ 11编译器选项启用。
奇怪的是,当我使用
编译以下代码示例时g ++ -std = c ++ 11 -pthread -c main.cpp -o main.o
然后我没有错误。
这是main.cpp
#include <iostream>
#include <thread>
void f1()
{
std::cout << "Thread executing\n";
}
int main()
{
std::thread t1(f1);
std::thread t2(f1);
t1.join();
t2.join();
}
当我尝试编译rbm_test.cc时,是否有可能某些编译标志发生冲突?
答案 0 :(得分:8)
- ansi
标志与-std=c++11
标志冲突。 -ansi
相当于-std=c++98
。删除-ansi
标志可以解决问题。