使用MinGW编译器时链接错误(找不到__main)

时间:2011-02-13 01:21:43

标签: c++ mingw linker-errors

我正在尝试在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和大量的警告信息。

你能帮我找出哪些图书馆应该链接在一起吗?

4 个答案:

答案 0 :(得分:6)

请尝试使用ld进行关联,而不是使用g++

试试这个:

Z:\dev> g++ -c test.cpp -o test.o
Z:\dev> g++ -o test.exe test.o

答案 1 :(得分:1)

除非您知道自己需要,否则请勿直接致电ldg++会知道如何正确调用它。

g++ -o test.exe test.o

答案 2 :(得分:1)

使用g++来调用链接器,例如

  

g ++ test.o -o test.exe

干杯&amp;第h。,

答案 3 :(得分:0)

如果需要使用-lgcc,请与ld链接。否则,请使用g++进行链接。