簡體   English   中英

在Win 7(cygwin)中構建OpenOCD時如何解決“對“ isascii”的未定義引用”

[英]how can solve “undefined reference to `isascii'” when build OpenOCD in Win 7 (cygwin)

我正在Cygwin的窗口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中所示<ctype.h>定義的isascii()是ISO C標准的擴展。 因此,沒有必要可用。 如上所述,從Visual C ++ 2005運行時庫開始不建議使用不帶下划線的名稱(安裝較舊的MSVCRT運行時將無濟於事)。

因此,使用__isascii()變體是正確的。

但是,使用GCC 4.6.1的較舊版本的MinGW運行時安裝會接受isascii()而不給出錯誤。 這是因為它是在libmoldname.a-lmoldname )中定義的libmoldname.a用於鏈接的libs之一。 在最新版本的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會自動添加此庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM