使用mingw交叉编译x86_64-w64的cairo

her*_*ung 5 linker cross-compiling cairo mingw-w64

我有一个应用程序,再次链接SDL和cairo,我想在ubuntu上为win64交叉编译.我使用这篇优秀的博客文章来获取SDL交叉编译,并且我使用了另一篇博文来交叉编译zlib,libpng和libpixman.

但是,我现在在尝试编译我的最小测试程序时遇到链接器错误:

$ make cairotest.exe 
x86_64-w64-mingw32-gcc -o cairotest.o -c cairotest.c -I/usr/x86_64-w64-mingw32/include/SDL2 -Dmain=SDL_main -I/home/jshaw/x86_64-w64/include/cairo -I/home/jshaw/x86_64-w64/include/pixman-1 -I/home/jshaw/x86_64-w64/include/libpng16 
x86_64-w64-mingw32-gcc -o cairotest.exe cairotest.o -L/usr/x86_64-w64-mingw32/lib -lmingw32 -lSDL2main -lSDL2 -mwindows -L/home/jshaw/x86_64-w64/lib -lcairo 
collect2: error: ld returned 1 exit status
Makefile:13: recipe for target 'cairotest.exe' failed
Run Code Online (Sandbox Code Playgroud)

我应该提一下,如果我只使用没有任何开放代码的SDL2,这个测试程序可以正常工作,所以我怀疑我交叉编译的cairo库有问题.我该如何诊断问题呢?

Jos*_*ahm 3

查看您的 Makefile,似乎您正在使用正常方式pkg-config来发现 Cairo 库。CAIRO_LDFLAGS := $(shell $(PKG_CONFIG) cairo --libs)这将找到主机库的路径,这可能是与目标不同的体系结构。像这样的架构不匹配确实会导致链接器出现奇怪的问题。我相信您应该寻找类似的东西usr/x86_64-w64-mingw32/bin/pkg-config

其他可以尝试的事情;

手动运行编译命令,因为 makefile 可能会抑制输出。

此外,运行命令时,将-v标志添加到命令行以获取详细输出,以便更好地找出问题所在。