Как исправить неразрешенные внешние версии SDL 2.0.3 в Visual Studio 2015 Preview?
поэтому я получаю следующие ошибки:
1>SDL2main.lib(SDL_windows_main.obj) : error LNK2019: unresolved external symbol __imp__fprintf referenced in function _ShowError
1>SDL2main.lib(SDL_windows_main.obj) : error LNK2019: unresolved external symbol __imp____iob_func referenced in function _ShowError
мой код просто:
#include <iostream>
#include "SDL2\SDL.h"
int main(int argc, char* argv[])
{
std::cout << "Hello World!" << std::endl;
return 0;
}
Я правильно связал библиотеки, и это отлично работает в vs2012, но по какой-то причине не будет компилироваться в vs2015.
Ответы
Ответ 1
У меня была такая же проблема с SDL 1.2 - решение, которое сработало для меня, заключалось в том, чтобы загрузить источник SDL и создать lib с VS 2015. Проблема была исправлена, когда я привязан к новым (VS2015) встроенным libs - возможно, кто-то должен попробовать то же самое для SDL 2 (перестроить lib из исходного кода)?
Ответ 2
idk, если это что-то в vs2015 библиотеках времени исполнения по умолчанию, почему он вызывает эти неразрешенные внешние ссылки или что-то еще не связанное по умолчанию больше при создании консольного проекта win32, но один из нерешенных внешних элементов исчезает, когда я переключу библиотеку времени выполнения в /MTd, imp_iob_func по-прежнему появляется, но решение, с которым я закончил работу, загружает исходный код sdl2, который является бесплатным, и переходит в файл проекта sdl2main, редактируя функцию ливня
от
fprintf(stderr, "%s: %s\n", title, message);
к
printf("%s: %s\n", title, message);
Таким образом, это может быть или не быть ужасной идеей, но хорошо, она строит и компилирует. Я только что заменил свой sdl2main.lib новым модифицированным. и voila больше не связывает ошибку. так что это может быть или не быть ужасной ошибкой и будет укусить меня всякий раз, когда я прошу sdl создать сообщение об ошибке. я, вероятно, добавлю это изменение или комментарий к нему в будущем, если найду лучшее решение или подтвержу, что это была большая ошибка. но это то, что я должен работать.
Ответ 3
Вы пытались просто создать неиспользуемую функцию в своем собственном проекте, ссылаясь на эти неразрешенные функции, т.е.
void HackToReferencePrintEtc()
{
fprint(stderr, "%d", 1);
// Add other unresolved functions
}
Это позволило решить некоторые проблемы, возникшие при использовании Intel MKL, который ссылается на printf, где компоновщик продолжал давать нерешенные внешние данные, но добавив выше в файл StdAfx.cpp(предварительно скомпилированный файл).