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

5
我有一个链接了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

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

1个回答

3
看看你的 Makefile,似乎你正在使用普通的 pkg-config 来发现 Cairo 库。CAIRO_LDFLAGS := $(shell $(PKG_CONFIG) cairo --libs)。这将找到你的主机库的路径,这可能是与目标不同的架构。这种架构不匹配可能会导致链接器出现奇怪的问题。我认为你应该寻找类似于 usr/x86_64-w64-mingw32/bin/pkg-config 的东西。
其他尝试的方法;
手动运行编译命令,因为 makefile 可能会抑制输出。
此外,在运行命令时,添加 -v 标志到命令行中以获得详细输出,以更好地找出问题所在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接