2014-11-28 1 views
1

Я использую MinGW для Linux (Ubuntu, в частности) для компиляции C-программы для Windows. Я использую библиотеку под названием SFML, и это привязки, называемые CSFML. Я использую -L и -l, чтобы найти библиотеки, но при компиляции я получаю эту ошибку:DLL: Формат файла не распознается при компиляции C с MinGW в Linux для Windows

win32/dll/csfml-audio-2.dll: file not recognized: File format not recognised 

У меня нет ни малейшего представления, почему. Вот команда, которую я использую для компиляции:

sudo i686-w64-mingw32-gcc -o wandering src/main.c src/constants.c src/Display/display.c **...some more c files in here...** src/Generation/perlinnoise.c $(pkg-config --libs --cflags glib-2.0) $(pkg-config --libs --cflags gee-1.0) -Iwin32/CSFML-2.1/include -Lwin32/dll -lcsfml-audio- 

Кто-нибудь знает, почему это происходит? Я могу скомпилировать программы C без SFML, но с MinGW просто отлично ...

+0

Ваш оператор компиляции использует путь «относительного» каталога, я думаю, что это должен быть абсолютный путь. И.Е. -I/win32/CSFML-2.1/include -L/win32/dll – user3629249

ответ

3

DLL имеет исполняемый файл PE32. Он не используется для компоновщика. Вместо этого вы должны использовать библиотеку импорта. Этот файл имеет расширение LIB.

Я слышал, что есть некоторые версии компилятора gcc, чем генерировать библиотеку импорта из DLL на лету. Похоже, ваша версия этого не делает.

+0

Импортировать библиотеку? Что это? Какое расширение файла у них есть? –

+1

На самом деле для mingw, библиотеки импорта должны иметь такое же расширение, что и архивы 'lib * .a'. Иногда 'lib * .dll.a' используется для различения между lib и архивом, содержащим фактический код. – greatwolf

Смежные вопросы