我有一个应用程序再次链接SDL和cairo,我想在ubuntu上为win64进行交叉编译。我使用this excellent blog post来进行SDL交叉编译,并且我使用another blog post来交叉编译zlib,libpng和libpixman。
但是,我现在在尝试编译my minimal test program时遇到链接器错误:
$ 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
我应该提一下,如果我只使用没有任何cairo代码的SDL2,这个测试程序可以正常工作,所以我怀疑我交叉编译的cairo库有问题。我该如何诊断问题?
答案 0 :(得分:3)
查看您的Makefile,看起来好像您正在使用普通$a = ["1"=>"A", "2"=>"B", "3"=>"C"];
$b = ["n"=>"5"];
$c = array_merge($a,$b);
print_r($c);
来发现您的Cairo库。 pkg-config
。这将找到主机库的路径,这可能是与目标不同的架构。像这样的体系结构不匹配确实会导致链接器出现奇怪的问题。我相信你应该寻找类似CAIRO_LDFLAGS := $(shell $(PKG_CONFIG) cairo --libs)
的东西。
其他要尝试的事情;
手动运行编译命令,因为makefile可能会抑制输出。
此外,在运行命令时,将usr/x86_64-w64-mingw32/bin/pkg-config
标志添加到命令行以获取详细输出以更好地确定问题所在。