linker - 使用 mingw 为 x86_64-w64 交叉编译 cairo

标签 linker cross-compiling cairo mingw-w64

我有一个应用程序,它再次链接 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

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

最佳答案

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

其他可以尝试的事情;

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

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

关于linker - 使用 mingw 为 x86_64-w64 交叉编译 cairo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30444931/

相关文章:

c - 查看可执行二进制文件的链接器 'uses' 的确切内存范围

c++ - 不完整类型 Qt 的无效使用

c - arm-linux-gnueabi-gcc 找不到库

gcc - 链接可执行文件时查找共享库依赖项

android - mipsel-linux-gcc : Command not found

linux - 图形对于开罗渲染器位图来说太大了

c - 使用 -std=c99 编译时,be64toh 未链接或声明

python - 如何通过 pip 安装 cairocffi?

c++ - GTK 绘图时闪烁

c++ - LNK2019 - 为什么未解决外部与模板 friend 功能