【问题标题】:DLL: File format not recognised when compiling C with MinGW on Linux for WindowsDLL:在 Linux for Windows 上使用 MinGW 编译 C 时无法识别文件格式
【发布时间】:2014-11-28 14:56:14
【问题描述】:

我在 Linux(特别是 Ubuntu)上使用 MinGW 为 Windows 编译 C 程序。我正在使用一个名为 SFML 的库,它的绑定称为 CSFML。我正在使用 -L 和 -l 来定位库,但是当我编译时出现此错误:

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-

有人知道为什么会这样吗?我可以在没有 SFML 的情况下编译 C 程序,但使用 MinGW 就可以了...

【问题讨论】:

  • 你的编译语句使用的是“相对”目录路径,我认为应该是绝对路径。 IE。 -I/win32/CSFML-2.1/include -L/win32/dll

标签: c linux windows dll mingw


【解决方案1】:

DLL 有一个 PE32 可执行文件头。它不用于链接器。您应该改用导入库。此文件的扩展名为 LIB。

我听说有一些 gcc 编译器版本可以动态地从 DLL 生成导入库。你的版本好像没有。

【讨论】:

  • 导入库?那是什么?他们有什么文件扩展名?
  • 其实对于mingw,导入库应该和档案lib*.a有相同的扩展名。有时,lib*.dll.a 用于区分导入库和包含实际代码的存档。
【解决方案2】:

从命令行似乎正在尝试使用 sudo i686-w64-mingw32-gcc 64 位编译器并提供 32 位 DLL,即 win32/dll/csfml-audio- 2.dll。更改为 x64/dll/csfml-audio-2.dll。它应该可以正常工作。

【讨论】:

    猜你喜欢
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2012-02-15
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多