我昨天下载了iconv,并使用以下方式安装了它:
$ ./configure --prefix=/usr/local
$ make
$ make install
当我尝试从shell运行iconv
时,我抱怨找不到共享对象文件,因此我执行了export LD_LIBRARY_PATH=/usr/local/lib
。然后iconv工作了。
这导致我的应用程序出错。我不知道其中一个源文件已经包含iconv.h
。今天我在eclipse中多次成功构建了调试版本,但是在发布版本中,我遇到了这些错误:
undefined reference to `libiconv_close'
undefined reference to `libiconv_open'
undefined reference to `libiconv'
然后我惊慌失措,跑了make uninstall
,重新启动,但问题仍然存在。我怎样才能让我的程序再次运行?
ldconfig -v | grep "iconv" shows:
libiconv.so.2 -> libiconv.so.2.5.1
我在Ubuntu 12.04 LTS
答案 0 :(得分:1)
LD_LIBRARY_PATH
是一个覆盖,应该仅使用 进行调试,或者解决那些难以修复的错误。
在任何情况下都不应该在您的环境中全局设置它,因为您在此处描述的内容迟早会发生,尤其是当您将手动编译的软件安装到系统目录时...(问题:为什么你没有通过你的软件包管理器安装iconv
吗?总是应该是你的首选。)
如果您的iconv
安装需要库路径,请使用 local 覆盖创建别名:
alias iconv="LD_LIBRARY_PATH=/usr/local/lib iconv"
这使iconv
正确运行,但不会影响其他包或构建进程。
下划线,找到export LD_LIBRARY_PATH=...
(无论你在哪里放置它),然后摆脱它。这应该会使您的应用程序再次正确编译(当然,除非您通过手动安装/卸载将您的系统添加到/usr
...)