Все,
Я использую цепочку инструментов 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 , существуют различия между путями поиска для 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 getopt
но не error
? Как отметил Игнасио ниже, getopt - это POSIX.И какой самый простой способ обойти эту проблему?
- Сбросить до ISO C?
- Добавить / usr / include для поиска пути для компилятора?
- Скопировать
error
в / usr / i586-mingw32msvc / include /?