我有一个C程序; 它编译并链接到gcc -std=gnu11 iter.c -o iter因为我使用了像strndup , strnlen和strsep这样的一些GNU string.h扩展。
我想在Ubuntu Linux上使用i686-w64-mingw32-gcc软件包编译Windows程序。
$ i686-w64-mingw32-gcc -std=gnu11 iter.c -o iter32.exe In file included from iter.c:1:0: iter.h: In function 'str_chomp': iter.h:166:15: warning: implicit declaration of function 'strndup' [-Wimplicit-function-declaration] char* new = strndup(str,MAX_STR_LEN); ^ iter.h:166:15: warning: incompatible implicit declaration of built-in function 'strndup' iter.h: In function 'str_split': iter.h:189:19: warning: incompatible implicit declaration of built-in function 'strndup' *str_copy = strndup(str,MAX_STR_LEN); ^ iter.h:211:26: warning: implicit declaration of function 'strsep' [-Wimplicit-function-declaration] for (i = 0; (token = strsep(&str_copy,delim_str)) != NULL; i++) { ^ iter.h:211:24: warning: assignment makes pointer from integer without a cast [-Wint-conversion] for (i = 0; (token = strsep(&str_copy,delim_str)) != NULL; i++) { ^ /tmp/ccPH0nG5.o:iter.c:(.text+0x216): undefined reference to `strndup' /tmp/ccPH0nG5.o:iter.c:(.text+0x2bf): undefined reference to `strndup' /tmp/ccPH0nG5.o:iter.c:(.text+0x3a7): undefined reference to `strsep' collect2: error: ld returned 1 exit status
我已经安装了所有需要的MinGW运行库和库,但是MinGW似乎忽略了-std=gnu11指令。 它并不完全忽略这个选项,因为-std=asdf是“无法识别的”,但拒绝交叉编译GNU C.
有没有一种方法可以交叉编译Windows使用GNU扩展的程序?
编译C ++线程
为什么窗口返回代码叫做HRESULT?
为什么不在Windows上创build/写入文件与fstream工作启动?
UNIX的primefaces性读取()/写入()发送数据到设备
如果一些参数只是inttypes,ShellExecute不起作用
是否有可能读取Linux c + +中的udp套接字缓冲区中缓冲了多less字节?
获取句柄并写入启动我们的过程的控制台
c ++ – variables到系统()
syslog存储错误消息
PHP执行的程序失败
正如评论中所讨论的,尽管MinGW提供了许多GNU程序,包括GCC,但它不提供GNU C库。 由GCC为MinGW环境构建的C程序依赖于微软的C运行时库。 他们可以使用GNU 语言扩展,但通常不是由Microsoft实施的GNU 库扩展。 另一方面,他们可以依靠微软的图书馆扩展,而不是由GNU实现,尽管他们可能需要提供他们自己的头文件。
如果你的程序依赖于目标环境中可能或不可用的函数(例如Windows / MinGW),那么通常的做法是使用条件编译指令,也许可以使用宏替代这些函数的构建目标,他们。 根据具体的功能,这可能意味着你有条件地提供你自己的实现。
如何将条件编译整合到构建系统中是一个更为广泛的问题。 如果你正在使用Autotools,那么这种设备就是其核心功能之一。 你可以做类似CMake,也可能与其他大多数流行的系统。 如果你使用的是手动构建系统,那么当然你有自由和义务来提出你自己的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。