对‘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