所有
我正在使用mingw32工具链在linux平台上进行一些交叉编译。一切都很顺利,直到我从标准库中包含<error.h>
。现在mingw32吐出编译器错误,说它找不到error.h
。
虽然这是一个GNU扩展,但我也使用GNU getopts.h
,它确实有用。那么,为什么我会遇到这个问题呢?以下是详细输出:
[09:57:48]$ i586-mingw32msvc-gcc scanner.c -O -Wall -o brookfieldSplitter.exe -v 2>&1 | sed ':1;s,/[^/.][^/]*/\\.\\./,/,;t 1'
Using built-in specs.
Target: i586-mingw32msvc
Configured with: /build/buildd/mingw32-4.2.1.dfsg/build_dir/src/gcc-4.2.1-2-dfsg/configure -v --prefix=/usr --target=i586-mingw32msvc --enable-languages=c,c++ --enable-threads --enable-sjlj-exceptions --disable-multilib --enable-version-specific-runtime-libs
Thread model: win32
gcc version 4.2.1-sjlj (mingw32-2)
/usr/libexec/gcc/i586-mingw32msvc/4.2.1-sjlj/cc1 -quiet -v scanner.c -quiet -dumpbase scanner.c -mtune=pentium -auxbase scanner -O -Wall -version -o /tmp/cc4itePc.s
ignoring nonexistent directory "/usr/i586-mingw32msvc/sys-include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/include
/usr/i586-mingw32msvc/include
End of search list.
GNU C version 4.2.1-sjlj (mingw32-2) (i586-mingw32msvc)
compiled by GNU C version 4.4.4.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 593b76e6db3b48c579d5ccd7737af5b4
scanner.l:53:19: error: error.h: No such file or directory
scanner.l: In function 'main':
scanner.l:638: warning: implicit declaration of function 'error'
如此mingw32 wiki page所述,gcc和mingw32的搜索路径之间存在差异。您可以在上面的输出中看到它搜索#include
个项目。
请求locate error.h
的内容:
[10:44:42]$ locate error.h
/usr/i586-mingw32msvc/include/raserror.h
/usr/i586-mingw32msvc/include/winerror.h
/usr/include/error.h
/usr/include/glib-2.0/gio/gdbuserror.h
/usr/include/glib-2.0/gio/gioerror.h
/usr/include/glib-2.0/glib/gerror.h
/usr/include/i386-linux-gnu/bits/error.h
/usr/include/linux/can/error.h
/usr/lib/syslinux/com32/include/gplinclude/disk/error.h
/usr/share/doc/ipython/manual/html/api/generated/IPython.kernel.core.error.html
/usr/share/doc/ipython/manual/html/api/generated/IPython.kernel.error.html
/usr/share/pgadmin3/docs/cs_CZ/connect-error.html
/usr/share/pgadmin3/docs/en_US/connect-error.html
/usr/share/pgadmin3/docs/fr_FR/connect-error.html
/usr/share/webkitgtk-1.0/webkit-1.0/resources/error.html
/usr/share/webkitgtk-3.0/webkit-3.0/resources/error.html
/usr/src/linux-headers-3.0.0-12/arch/ia64/sn/include/ioerror.h
/usr/src/linux-headers-3.0.0-12/arch/mips/include/asm/fw/cfe/cfe_error.h
/usr/src/linux-headers-3.0.0-12/include/linux/can/error.h
/usr/src/linux-headers-3.0.0-12-generic/include/config/ata/verbose/error.h
为什么mingw32包含GNU扩展如下面的Ignacio所述,getopt是POSIX。解决这个问题最简单的方法是什么? getopt
但不包括error
?
error
复制到/ usr / i586-mingw32msvc / include /?答案 0 :(得分:0)
标题error.h
,正如您在撰写本文时的最后一条评论中所链接的那样,是GNU libc的一部分,也就是glibc,即GNU系统的C库。
您正在为 Windows 进行编译,它没有GNU libc,它使用msvcr *。你不能像这样神奇地交叉编译Linux / GNU代码并期望它能够工作。