我正在尝试在Windows上使用MinGW编译一个非常简单的程序,但我仍然遇到链接错误。要编译的程序只是C ++ hello world。
Z:\dev>type test.cpp
#include <iostream>
int main() {
std::cout << "Hello World!\n";
return 0;
}
当然,只需使用MinGW的g ++即可。
Z:\dev>g++ test.cpp -o test.exe
Z:\dev>test.exe
Hello World!
但是,我尝试将编译和链接分开,但失败了。
Z:\dev>g++ -c test.cpp -o test.o
Z:\dev>ld test.o -o test.exe
test.o:test.cpp:(.text+0xa): undefined reference to `__main'
test.o:test.cpp:(.text+0x19): undefined reference to `std::cout'
test.o:test.cpp:(.text+0x1e): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& s
<std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
test.o:test.cpp:(.text+0x37): undefined reference to `std::ios_base::Init::~Init()'
test.o:test.cpp:(.text+0x5a): undefined reference to `std::ios_base::Init::Init()'
test.o:test.cpp:(.text+0x66): undefined reference to `atexit'
很明显,我错过了一些图书馆。所以,我试图链接几个MinGW的库,但仍然没有好处,如-lmsvcrt
。我也做了lstdc++
,但仍然无法找到__main
和大量的警告信息。
你能帮我找出哪些图书馆应该链接在一起吗?
答案 0 :(得分:6)
请尝试使用ld
进行关联,而不是使用g++
。
试试这个:
Z:\dev> g++ -c test.cpp -o test.o
Z:\dev> g++ -o test.exe test.o
答案 1 :(得分:1)
除非您知道自己需要,否则请勿直接致电ld
。 g++
会知道如何正确调用它。
g++ -o test.exe test.o
答案 2 :(得分:1)
使用g++
来调用链接器,例如
g ++ test.o -o test.exe
干杯&amp;第h。,
答案 3 :(得分:0)
如果需要使用-lgcc
,请与ld
链接。否则,请使用g++
进行链接。