Вот какие шаги я делаю и где что-то идет не так:
Я использую компилятор MSVC через командную строку, cl .exe:
Код: Выделить всё
Microsoft (R) C/C++ Optimizing Compiler Version 19.40.33812 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
Код: Выделить всё
Microsoft (R) Incremental Linker Version 14.40.33812.0
Copyright (C) Microsoft Corporation. All rights reserved.
usage: LINK [options] [files] [@commandfile]
Код: Выделить всё
#define SDL_MAIN_HANDLED
#include
#include
using namespace std;
int main(int argc, char **argv) {
SDL_SetMainReady();
// Initialize SDL
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
return 1;
}
// Create a window
SDL_Window *window = SDL_CreateWindow("SDL2 Window",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
640, 480, SDL_WINDOW_SHOWN);
if (window == nullptr) {
SDL_Quit();
return 1;
}
// Event loop
bool isRunning = true;
SDL_Event event;
while (isRunning) {
while (SDL_PollEvent(&event) != 0) {
if (event.type == SDL_QUIT) {
isRunning = false;
}
}
}
// Cleanup
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
Чтобы скомпилировать это, я запускаю следующее:
Код: Выделить всё
cl main.cpp -I "C:/SDL2/include" /c
Затем для связывания я запускаю link.exe и передаю путь к моей библиотеке и вот где все идет не так.
Код: Выделить всё
link.exe main.obj /LIBPATH:C:/SDL2/lib/x86/SDL2.lib
Microsoft (R) Incremental Linker Version 14.40.33812.0
Copyright (C) Microsoft Corporation. All rights reserved.
main.obj : error LNK2019: unresolved external symbol _SDL_SetMainReady referenced in function _main
main.obj : error LNK2019: unresolved external symbol _SDL_CreateWindow referenced in function _main
main.obj : error LNK2019: unresolved external symbol _SDL_DestroyWindow referenced in function _main
main.obj : error LNK2019: unresolved external symbol _SDL_PollEvent referenced in function _main
main.obj : error LNK2019: unresolved external symbol _SDL_Init referenced in function _main
main.obj : error LNK2019: unresolved external symbol _SDL_Quit referenced in function _main
main.exe : fatal error LNK1120: 6 unresolved externals
Я попробовал запустить /VERBOSE, и после поиска в 1338 строках журналов нигде не SDL2.lib даже упоминается. И да, я запустил ОБА с предоставленным LIBPATH и без него, а затем проверил разницу между двумя созданными журналами, и они буквально одинаковы.
Странно, когда вместо этого я запускаю такой компоновщик:
Код: Выделить всё
link.exe main.obj /LIBPATH C:/SDL2/lib/x86/SDL2.lib

(PS: обязательно включите SDL2.dll< /strong> в той же папке на случай, если вы тестируете это самостоятельно)
Поэтому по какой-то причине, если передать без двоеточия и пробела, все работает как положено. Однако в СОБСТВЕННОЙ ДОКУМЕНТАЦИИ Microsoft указано следующее:

И что еще более сбивает с толку то, что при запуске без аргументов программа link.exe говорит то же самое:
Код: Выделить всё
/LIBPATH:dir
Поэтому мой вопрос: почему он это делает? ? Это ошибка? Я использую его неправильно?[/b]
На самом деле я не тот, кто использует link.exe, это CMake на самом деле генерирует этот - технически правильный - вызов линкер. Итак, в таком случае, почему это еще не исправлено и могу ли я что-то сделать, чтобы CMake выдавал правильный результат? Тот факт, что я не нашел подобных вопросов в Интернете, позволяет мне предположить, что я делаю что-то неправильно.
Есть ли обходные пути или я могу вообще не использовать CMake с link.exe< /code>?
Извините, если я звучу немного истерично, я застрял в этом уже 3 дня и чувствую, что мое здравомыслие ускользает
Подробнее здесь: https://stackoverflow.com/questions/790 ... ore-passed