c - 在 Win 7 (cygwin) 中构建 OpenOCD 时如何解决 "undefined reference to ` isascii'"

标签 c linux

我正在通过 Cygwin 在 window 7 上构建 OpenOCD 并收到此消息

openocd-0.7.0/jimtcl/jim.c:3009: undefined reference to `isascii'
collect2: error: ld returned 1 exit status
Makefile:45: recipe for target 'jimsh.exe' failed
make[2]: *** [jimsh.exe] Error 1

也许 Cygwin 中不存在“isascii”的库 我按照以下步骤进行构建:

http://www.tincantools.com/wiki/Compiling_OpenOCD_Win7

最佳答案

MinGW 发行版也会出现同样的问题。如 http://pubs.opengroup.org/onlinepubs/009696699/basedefs/ctype.h.html 中所示, isascii()<ctype.h> 中定义是 ISO C 标准的扩展。因此,没有必要可用。如上所述,不推荐使用不带下划线的名称,从 Visual C++ 2005 运行时库开始(安装较旧的 MSVCRT 运行时将无济于事)。

因此,使用 __isascii()变体是正确的。

但是,较早安装的带有 GCC 4.6.1 的 MinGW 运行时接受 isascii()没有给出错误。那是因为它是在 libmoldname.a 中定义的( -lmoldname ) - GCC 用于链接的库之一。 在最新版本的 MinGW 中,libmoldname.a已更改以删除一些旧功能,包括 isascii() .目标文件 isascii.o已从此库中删除。 这些链接与此删除相关:

sourceforge.net/apps/trac/mingw-w64/changeset/5807/trunk

sourceforge.net/p/mingw-w64/mailman/mingw-w64-public/thread/51751223.2020804@videolan.org/

http://marc.info/?l=mingw-patches&m=107980328623432

不幸的是,<ctype.h>仍然定义 isascii()没有下划线。因此,此错误仅出现在链接阶段。

如果出于任何原因无法更改代码,请使用旧版本的 MinGW 或 Cygwin 进行构建。检查发行版是否支持 isascii()输入:

objdump -t c:/mingw/lib/libmoldname.a | grep "isascii" 

输出应该为空(不支持)或:

isascii.o:     file format pe-i386
[  0](sec -2)(fl 0x00)(ty   0)(scl 103) (nx 1) 0x00000000 isascii.c
[  2](sec  1)(fl 0x00)(ty  20)(scl   2) (nx 1) 0x00000000 _isascii

顺便说一句,不需要添加 -lmoldname$LDFLAGS , GCC 会自动添加这个库。

关于c - 在 Win 7 (cygwin) 中构建 OpenOCD 时如何解决 "undefined reference to ` isascii'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19564168/

相关文章:

c - 应该释放全局静态数组吗?

检查数字是否为右截素数

linux - 在 OpenStack Swift 中禁用身份验证

linux - 为什么参数-type d在find命令中不生效?

c - 在我的字符串中获取垃圾

objective-c - 为什么 fget 不工作?

c - 如果我们只有一个 MQ,则同步 IBM MQ : need or not,

linux - 关于Linux进程内存布局的问题

linux - Bash 文件在用于 testng 的 Windows 中运行良好,但在 linux/mac 中不起作用

java - 在 Windows 10 上运行 UTF-8 Java 文件与在 Linux 上运行相同