Как исправить неразрешенные внешние версии 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(предварительно скомпилированный файл).