Ошибка связи при использовании компилятора MinGW (не удается найти __main) - PullRequest
2 голосов
/ 13 февраля 2011

Я пытаюсь скомпилировать очень простую программу с MinGW для Windows, но я все еще получаю ошибки ссылок. Программа для компиляции просто 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 ]

6 голосов
/ 13 февраля 2011

Вместо использования ld, попробуйте использовать g++ для ссылки.

Попробуйте это:

Z:\dev> g++ -c test.cpp -o test.o
Z:\dev> g++ -o test.exe test.o
1 голос
/ 13 февраля 2011

используйте g++ для вызова компоновщика, например

g ++ test.o -o test.exe

Приветствия & hth.,

1 голос
/ 13 февраля 2011

Не звоните ld напрямую, если вы не знаете, что вам это нужно. g++ будет знать, как правильно его назвать.

g++ -o test.exe test.o
0 голосов
/ 31 мая 2019

Ссылка с -lgcc, если вам нужно использовать ld. В противном случае используйте g++ для ссылки.

...