我在Windows 7上使用MinGw。以下简单程序编译得很好,但是链接器抱怨并且我不明白什么是错的:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<int> iv;
iv.push_back(7);
cout << iv.back() << endl;
return 0;
}
编译器/链接器消息如下所示:
mingw32-g++.exe -Wall -fexceptions -std=c++0x -Wall -g -std=c++0x -Wall -g -frepo -IC:\cppbuchincludes\include -IG:\Boost -IG:\Users\thomas\cpp\STLUsage\\include -c G:\Users\thomas\cpp\STLUsage\main.cpp -o obj\Debug\main.o
mingw32-g++.exe -o bin\Debug\STLUsage.exe obj\Debug\main.o G:\Boost\stage\lib\libboost_filesystem-mgw45-mt-d-1_45.dll.a G:\Boost\stage\lib\libboost_regex-mgw45-mt-d-1_45.dll.a G:\Boost\stage\lib\libboost_system-mgw45-mt-d-1_45.dll.a G:\Boost\stage\lib\libboost_thread-mgw45-mt-1_45.dll.a G:\Boost\stage\lib\libboost_unit_test_framework-mgw45-mt-d-1_45.dll.a
collect: recompiling G:\Users\thomas\cpp\STLUsage\main.cpp
collect: relinking
collect2: '_ZNSt12_Vector_baseIiSaIiEEC1Ev' was assigned to 'obj\Debug\main.rpo', but was not defined during recompilation, or vice versa
obj\Debug\main.o: In function `vector':
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/include/c++/bits/stl_vector.h:208: undefined reference to `std::_Vector_base<int, std::allocator<int> >::_Vector_base()'
(...and so on...)
我可以使用自己定义的模板。
我从一本书中获得了MinGw二进制文件,并按照该书中有关编译器设置的说明进行操作。特别是对Boost库的引用是从那里获得的。
这一定很简单,我只是想轻而易举地使用STL。
编辑按照答案中给出的建议,我在设置 - &gt;中用g ++。exe替换了用于编译的二进制文件。编译器和调试 - &gt;工具链可执行文件对话框,但我收到相同的错误消息(mingw32-g ++。exe现在被g ++。exe替换)。
编辑(再次)这必须是Code :: Blocks设置的问题,因为从命令行使用g ++进行编译工作正常。
答案 0 :(得分:2)
使用g++
编译和链接程序。 mingw32-g++.exe
不这样做。
FAQ说,
gcc和mingw32-gcc有什么区别?
mingw32-gcc,mingw32-g ++等二进制文件作为交叉开发的辅助手段而存在。它们是在典型的gcc构建中创建的。因此,它们是作为GCC的维护者分发的。 gcc.exe表示二进制文件为目标生成等于构建的二进制文件,而mingw32-gcc二进制文件生成要在mingw32目标上执行的二进制文件。
所以我猜这个问题是因为mingw32-g++.exe
你不应该使用,用于正常构建。
试试这些:
g++ program.cpp //simple build
g++ program.cpp -Wall //build with all warnings enabled
g++ program.cpp -Wall -O2 //enable warnings and optimization level 2
g++ program.cpp -std=c++0x //use C++11 features
希望有所帮助。