`

当安装了libiconv环境下安装lua-iconv 会出现报错 /usr/local/lib/lua/5.1/iconv.so: undefined symb

 
阅读更多
转自: http://bbs.iresty.com/topic/25/%E5%BD%93%E5%AE%89%E8%A3%85%E4%BA%86libiconv%E7%8E%AF%E5%A2%83%E4%B8%8B%E5%AE%89%E8%A3%85lua-iconv-%E4%BC%9A%E5%87%BA%E7%8E%B0%E6%8A%A5%E9%94%99-usr-local-lib-lua-5-1-iconv-so-undefined-symbol-libiconv
当安装了libiconv环境下安装lua-iconv 会出现报错 /usr/local/lib/lua/5.1/iconv.so: undefined symbol: libiconv
王 王海波 29天之前
当libiconv先安装的时候会出现报错
/usr/local/lib/lua/5.1/iconv.so: undefined symbol: libiconv
stack traceback:
[C]: at 0x0044dfb0
[C]: in function 'require'
stdin:1: in main chunk
[C]: at 0x004045d0

简单的处理方式:
mv /usr/local/include/iconv.h ~/
luarocks install lua-iconv后再恢复

过程:
参考
http://www.cnblogs.com/lightsong/p/4634642.html
https://github.com/ittner/lua-iconv/issues/3
https://groups.google.com/forum/#!msg/openresty/blNGlzAl2ik/QuJBXtzLx9gJ

经过查证(受到此文启发 http://tonybai.com/2013/04/25/a-libiconv-linkage-problem/),

分析为先安装了 libiconv库, 导致 此库的iconv.h拷贝到 usr/local/include/iconv.h

然后编译 luaiconv工程,编译文件iconv.c文件时候, gcc先找到 usr/local/include/iconv.h 此文件, 以此文件内部的函数声明为准,编译出iconv.so

实际上次应该以系统提供的 iconv.h 为准, 此文件在 /usr/include/iconv.h

头文件gcc搜索次序:

:~/share_windows/openSource/lua/lua-iconv-lua-iconv-5$ ld -verbose | grep SEARCH
SEARCH_DIR("=/usr/i686-linux-gnu/lib32"); SEARCH_DIR("=/usr/local/lib32"); SEARCH_DIR("=/lib32"); SEARCH_DIR("=/usr/lib32"); SEARCH_DIR("=/usr/i686-linux-gnu/lib"); SEARCH_DIR("=/usr/local/lib/i386-linux-gnu"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib/i386-linux-gnu"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib/i386-linux-gnu"); SEARCH_DIR("=/usr/lib");

libiconv-------usr/local/include/iconv.h

#ifndef LIBICONV_PLUG
#define iconv_open libiconv_open
#endif
extern LIBICONV_DLL_EXPORTED iconv_t iconv_open (const char* tocode, const char* fromcode);

libiconv -- iconv.c 中 libiconv_open 定义收到宏控制, 应该未开启, 或者编译 luaiconv未链接libiconv库

#if defined FreeBSD && !defined gnu_freebsd
/* GNU libiconv is the native FreeBSD iconv implementation since 2002.
It wants to define the symbols 'iconv_open', 'iconv', 'iconv_close'. */
#define strong_alias(name, aliasname) _strong_alias(name, aliasname)
#define _strong_alias(name, aliasname)
extern __typeof (name) aliasname attribute ((alias (#name)));
#undef iconv_open
#undef iconv
#undef iconv_close
strong_alias (libiconv_open, iconv_open)
strong_alias (libiconv, iconv)
strong_alias (libiconv_close, iconv_close)
#endif

解决方法: 修改实现文件中, 引用的 iconv.h 引用方式, 将标准方式, 修改为自定义,并且写为全路径 /usr/include/iconv.h

然后再次 make && make install, 运行ok

vim luaiconv.c

#include <lua.h>
#include <lauxlib.h>
#include <stdlib.h>

#include "/usr/include/iconv.h"
#include <errno.h>



花下眠工作室: http://huaxiamian.cc
分享到:
评论

相关推荐

    libiconv-1.14-sol10-x86-local.gz

    libiconv-1.14-sol10-x86-local.gz

    ffprobe-20190623-bc3306f-win64-static可执行文件

    libiconv 1.15 &lt;http://gnu.org/software/libiconv&gt; libass 0.14.0 &lt;https://github.com/libass/libass&gt; dav1d 20190620-4a2ea99 &lt;https://code.videolan.org/videolan/dav1d&gt; libbluray 20180913-2d18c70 ...

    luaiconv.dll for windows

    release build with 1. LuaForWindows_v5.1.5-52 2. libiconv-1.15 3. lua-iconv-lua-iconv-7

    ffmpeg-2.5.2-win64-dev.7z

    libiconv 1.14 &lt;http://gnu.org/software/libiconv/&gt; libass 0.12.0 &lt;http://code.google.com/p/libass/&gt; libbluray 0.6.2 &lt;http://videolan.org/developers/libbluray.html&gt; libbs2b 3.1.0 &lt;http://bs2b....

    libiconv-1.15.rpm centos7,安装php的扩展

    编译安装时需要的libiconv包,安装完指定php的--with-iconv-dir=/usr/share/libiconv即可,不与系统自带的冲突。 php rpm包下载地址: https://download.csdn.net/download/sinat_24092079/10598887

    本人编译的iconv.so 与其头文件

    我在做一个加密芯片项目...1.如要iconv_open、iconv_close这样的名字,需在iconv.h中加入#define LIBICONV_PLUG即可。 2.如要libiconv_open、libiconv_close这样的名字,需在iconv.h中移除#define LIBICONV_PLUG即可。

    ffmpeg-2.5.2-win64-shared.7z

    libiconv 1.14 &lt;http://gnu.org/software/libiconv/&gt; libass 0.12.0 &lt;http://code.google.com/p/libass/&gt; libbluray 0.6.2 &lt;http://videolan.org/developers/libbluray.html&gt; libbs2b 3.1.0 &lt;http://bs2b....

    FFmpeg win64

    libiconv 1.14 &lt;http://gnu.org/software/libiconv/&gt; libass 0.13.2 &lt;https://github.com/libass/libass&gt; libbluray 0.9.2 &lt;http://videolan.org/developers/libbluray.html&gt; libbs2b 3.1.0 &lt;http://bs2b....

    ffplay-20190623-bc3306f-win64-static 可执行文件

    libiconv 1.15 &lt;http://gnu.org/software/libiconv&gt; libass 0.14.0 &lt;https://github.com/libass/libass&gt; dav1d 20190620-4a2ea99 &lt;https://code.videolan.org/videolan/dav1d&gt; libbluray 20180913-2d18c70 ...

    libiconv vc++ 6.0 实例代码 包含 动态dll 静态lib

    libiconv vc++ 6.0 实例代码 包含 动态dll 静态lib libiconv使用静态lib 工具-&gt;选项-&gt;目录 include加上include文件夹, lib加上lib 文件夹 项目里#include&lt;iconv.h&gt;,并在工程-&gt;设置-&gt;link里 对象/模块里加入 ...

    libiconv.lib for windows

    在Windows下的编译完成的libiconv库,格式为lib,版本为1.15 文档结构: --libiconv for windows |--include | |--iconv.h |--lib |--libiconv.lib

    libiconv-1.15和libintl-0.19.8.1,VS2015工程和 nMakefile

    所有代码都基于官网进行修改,iconv的代码来源于libiconv-1.15的lib目录,intl的代码来源于gettext-runtime的intl目录。 intl需要iconv的支持,如果想单独编译不需要iconv的intl, 请自行修改intl目录下的config.h...

    Linux中PHP安装相关资源包

    1)软件资源列表:《libiconv-1.13.tar》,《libmcrypt-2.5.8.tar.gz》,《mcrypt-2.6.8.tar.gz》,《memcache-2.2.5.tgz》,《mhash-0.9.9.9.tar.gz》 ,《php-5.2.13.tar.bz2》,《php-5.2.13-fpm-0.5.13.diff.gz...

    GNU libiconv-1.15和libintl-0.19.8.1,VS2017工程和 Makefile.mak 命令行编译文件

    所有代码都基于官网进行修改,iconv的代码来源于libiconv-1.15的lib目录,intl的代码来源于gettext-runtime的intl目录。 intl需要iconv的支持,如果想单独编译不需要iconv的intl, 请自行修改intl目录下的config.h...

    libiconv-1.14 for windows

    这个发布的资源有点问题,根据http://www.codeproject.com/Articles/302012/How-to-Build-libiconv-with-Microsoft-Visual-Studio 这篇文章的介绍,编译生成的libiconv_a.lib会缺少一个_libiconv_set_relocation_...

    libiconv_libiconv.lib_libiconv_

    libiconv.lib visual studio 2013编译

    Win版Wget1.15.exe

    -I../lib -I/win32dev/misc/wget/out2/include -O2 -Wall Link: i686-w64-mingw32-gcc -O2 -Wall -L/win32dev/misc/wget/out2/lib /win32dev/misc/wget/out2/lib/libiconv.a /win32dev/misc/wget/out2/lib/...

    libiconv-2.dll

    opencv libiconv-2.dll

    cocos2d-x c++的iconv.rar

    has been installed in /usr/local/include, there is no way any more to include the original /usr/include/iconv.h. We simply have to get away without it. Ad 1. The risk that a system header file ...

    libiconv-1.8-sol8-sparc-local.gz

    libiconv for solaris8

Global site tag (gtag.js) - Google Analytics