Ubuntu編譯安裝Cocos2d-x遇到“對‘libiconv*’未定義的引用”的問題

對‘libiconv*’未定義的引用

對‘libiconv_open’未定義的引用

對‘libiconv_close’未定義的引用


這個錯誤與GCC版本無關。

此時,你的系統內一定存在兩個iconv.h,其中一個是系統自帶的,在/usr/include/iconv.h,一個是你自己編譯安裝的,在/usr/local/include/iconv.h。

第二份iconv可能是你在編譯安裝其他app比如php時自動編譯安裝的。

參考:https://tonybai.com/2013/04/25/a-libiconv-linkage-problem/

我試過指定-liconv和-DLIBICONV_PLUG選項(cmake後的flags.make文件裏),甚至在CMakeLists.txt里加入了cocos_find_package(ICONV ICONV REQUIRED)和cocos_use_pkg(${APP_NAME} ICONV)兩句(我重寫了FindICONV.cmake),都沒用。(當然-liconv可以用了編譯cpp-empty-test)。

當然,我也按照上面那個文章試了nm了一下/lib/i386-linux-gnu/libc.so.6,但是並沒有iconv的足記。

我試着用-DLIBICONV_PLUG編譯了一下小代碼,是可行的,但是不知道爲什麼對於這個並沒用。

so,這個“唯一方案”對於cocos2d-x的編譯真的是唯一的方案。

解決方案:

暫時將/usr/local/include/iconv.h文件mv一下,比如iconv.h.bak,然後再編譯安裝就可以了,需要時再mv回來。這裏提供一份我自己的腳本:

#!/bin/sh

if [ -e "/usr/local/include/iconv.h" ];then
 mv /usr/local/include/iconv.h /usr/local/include/iconv.h.bak
 echo "可以使用cocos2d-x了"
else
 mv /usr/local/include/iconv.h.bak /usr/local/include/iconv.h
 echo "已恢復第三方cocos2d-x"
fi

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章