我正在尝试使用mingw-w64在Windows 10上编译Allegro 5程序。


我已经安装了mingw-w64。 g++ --version的输出是:

g++.exe (i686-posix-dwarf-rev2, Built by MinGW-W64 project) 7.1.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我从https://github.com/liballeg/allegro5/releases(文件:allegro-x86_64-w64-mingw32-gcc-8.2.1-posix-seh-static-5.2.5.0.zip)下载了Allegro 5的Windows二进制文件,并将文件解压缩到C:/allegro5,所以现在我有了C:/allegro5/binC:/allegro5/includeC:/allegro5/lib
一个小测试程序:

#include <stdio.h>
#include <allegro5/allegro.h>

int main(int argc, char **argv)
{
   al_init();
   return 0;
}

最后是我运行的编译命令:g++ test.cpp -I"C:/allegro5/include" -L"C:/allegro5/lib" -lallegro(在liballegro.dll.a下有一个名为C:/allegro5/lib的lib文件)


但是链接时存在一些问题:

C:\Users\xxxx\AppData\Local\Temp\ccg5z97Y.o:test.cpp:(.text+0x1e): undefined reference to `al_install_system'
collect2.exe: error: ld returned 1 exit status


A)这可能是什么原因?

B)我应该怎么做才能以静态方式进行编译?将-lallegro更改为-lallegro-static是否足够?

最佳答案

这个:

g++.exe (i686-posix-dwarf-rev2, Built by MinGW-W64 project) 7.1.0


是MinGW-W64提供的32位GCC变体之一。您正在尝试链接
它使用以下提供的64位库生成的32位代码:

allegro-x86_64-w64-mingw32-gcc-8.2.1-posix-seh-static-5.2.5.0.zip


这将无法正常工作。用适当的64位变体x86_64-posix-seh替换编译器

关于c++ - 使用带有mingw-w64的Allegro 5的未定义引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55042427/

10-09 05:59