У меня вопрос не об ошибках undefined reference, а об
Ошибка Toolchain "MinGW GCC" is not detected. в Eclipse, и связаны ли эти два.
Я пытаюсь настроить среду SDL. У меня Eclipse C++ 2018-2019 (v4.8) и 64-битный компилятор MinGW.
Я загрузил файлы с веб-сайта (файлы заголовков и библиотеки) и поместил их соответственно в следующие папки в моем установочном каталоге MinGW:
C: \ Program Files (x86) \ mingw-w64 \ mingw32 \ include \ SDL2
C: \ Program Files (x86) \ mingw-w64 \ mingw32 \ lib
Затем я создаю новый проект C++ (Executable> Hello World C++ Project) и снимаю флажок «Показывать типы проектов и цепочки инструментов, только если они поддерживаются платформой», чтобы иметь возможность выбрать цепочку инструментов MinGW, как показано на этом изображении.
Затем я использую Свойства> Сборка C / C++> Настройки и добавляю библиотеки
mingw32
SDL2main
SDL2
а также добавил путь "Включает"
C: \ Program Files (x86) \ mingw-w64 \ mingw32 \ include \ SDL2
Затем в верхней части окна я заметил предупреждение, в котором говорилось, что
Toolchain "MinGW GCC" is not detected.
После некоторого поиска в Google я обнаружил, что это, вероятно, связано с неправильной настройкой переменной PATH. Я поискал переменную и обнаружил, что она состоит из длинного списка путей, включая
C:\Program Files (x86)\mingw-w64\mingw32\bin;
Это было то, что каждое решение, которое я нашел, говорило, что я должен добавить, но предупреждение все еще было.
Затем я построил проект и скопировал SDL2.dll в ту же папку, что и исполняемый файл.
Когда я попытался создать следующий код
#include <iostream>
#include <SDL.h>
using namespace std;
int main(int argc, char *argv[]) {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
cout << "SDL init failed." << endl;
return 1;
}
cout << "SDL Init succeeded." << endl;
SDL_Quit();
return 0;
}
чтобы убедиться, что я все сделал правильно, я получил следующую ошибку в консоли сборки CDT:
Info: Configuration "Debug" uses tool-chain "MinGW GCC" that is unsupported on this system, attempting to build anyway.
Info: Internal Builder is used for build
g++ -o SDLTest.exe "src\\SDLTest.o" -lmingw32 -lSDL2main -lSDL2
src\SDLTest.o: In function `Z8SDL_mainv':
C:\Users\ilias\Desktop\eclipse-workspace\SDLTest\Debug/../src/SDLTest.cpp:15: undefined reference to `SDL_Init'
C:\Users\ilias\Desktop\eclipse-workspace\SDLTest\Debug/../src/SDLTest.cpp:22: undefined reference to `SDL_Quit'
C:/Program Files (x86)/mingw-w64/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.1.0/../../../../i686-w64-mingw32/lib/../lib/libmingw32.a(lib32_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x39): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
Я не совсем уверен, получаю ли я эту ошибку, потому что эта "Toolchain" MinGW GCC "не обнаружена". ошибка или потому что я что-то напутал. Что это такое и как это исправить?
«i686-w64-mingw32» не похоже на «64-битный компилятор». Вполне вероятно, что у вас неправильные библиотеки, заголовки или и то, и другое. Искаженное имя Z8SDL_mainv особенно странно - SDL_main.h объявляет его как (в режиме C++) extern "C" int SDL_main(int argc, char *argv[]), поэтому либо ваша установка не работает, либо вы делаете что-то необычное, о чем забыли упомянуть. Можем ли мы увидеть команду компиляции и ее вывод в дополнение к фазе компоновки?
@keltar Вы были правы, установка прервалась. Я переустановил Eclipse, и он работал нормально.





@ πάντα ῥεῖ Мой вопрос состоял из двух частей, но вопрос, на который вы указали, кажется, отвечает только на одну из них. Он ничего не содержит об этой ошибке в Eclipse, и может ли это быть причиной неопределенной ошибки ссылки