[英]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”的庫,我按照以下步驟進行構建:
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.