【发布时间】:2011-10-31 16:36:50
【问题描述】:
我正在尝试交叉编译一些我在 Linux for Windows 上编写的 C/C++ 程序。我有很多使用 GCC 和 MSVC 的经验。
通常在使用 gcc 编译程序时,会使用 -l 链接器参数来指定要链接的库。使用 MingW-gcc 链接器时,这似乎无法正常工作。
GCC 版本:
i586-mingw32msvc-gcc (GCC) 4.4.4
当链接使用的程序(例如,GTK+ 或 libpng、libz 等)时,使用类似:
i586-mingw32msvc-gcc -mwindows -L/opt/xcompile-win32/lib -lmylib -lmylib2 myprog.o -o myprog.exe
给出许多关于库函数未定义引用的错误。但是,如果我将库指定为像这样的附加对象:
i586-mingw32msvc-gcc -mwindows -L/opt/xcompile-win32/lib /opt/xcompile-win32/lib/libmylib.a /opt/xcompile-win32/lib/libmylib2.a myprog.o -o myprog.exe
一切正常,生成的程序运行良好!我的问题是:有没有办法让正常的 -l 库参数正常工作?这个方法好像有点麻烦!我似乎无法在网上找到任何解决此问题的内容。谢谢!
编辑:
澄清一下:命令行中库参数的顺序没有区别。此外,该程序仅使用 -l 参数在 Linux (gcc) 上编译得很好。实际命令如下:
i586-mingw32msvc-gcc -mwindows -o win32/vmclient.exe win32/gtk_test.o \
-L/opt/xcompile-win32/lib -latk-1.0 -lpangoft2-1.0 -lpangocairo-1.0 \
-lgdk_pixbuf-2.0 -lm -lcairo -lpng12 -lpango-1.0 -lfreetype -lfontconfig \
-lgmodule-2.0 -lgthread-2.0 -lglib-2.0
win32/gtk_test.o:gtk_test.c:(.text+0x37): undefined reference to `_gtk_init_abi_check'
(以及一堆类似的错误)。当以完全相同的顺序直接引用 .a 库文件时,该程序在 Win32(使用 i586-mingw32msvc-gcc)下编译得很好。
【问题讨论】:
标签: linux winapi gcc mingw cross-compiling