首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libiconv和MacOS

libiconv和MacOS
EN

Stack Overflow用户
提问于 2012-09-27 18:45:22
回答 5查看 14K关注 0票数 16

我正在尝试在Mac中编译GCC 4.5.1。

我对libiconv有个问题。首先,它抱怨了架构x86_64的未定义符号,即:_iconv,_iconv_open和_iconv_close。我发现libiconv的MacPorts版本将它们重命名为:_libiconv、_libiconv_open和_libiconv_close。因此,我链接到了/usr/lib中的Mac原生libiconv,而不是/opt/ MacPorts /lib中的本地库。

代码语言:javascript
复制
Undefined symbols for architecture x86_64:
"_iconv", referenced from:
  _convert_using_iconv in libcpp.a(charset.o)
  __nl_find_msg in libintl.a(dcigettext.o)
 (maybe you meant: __cpp_destroy_iconv, _cpp_init_iconv )
"_iconv_close", referenced from:
  __cpp_destroy_iconv in libcpp.a(charset.o)
  __cpp_convert_input in libcpp.a(charset.o)
  __nl_free_domain_conv in libintl.a(loadmsgcat.o)
"_iconv_open", referenced from:
  _init_iconv_desc in libcpp.a(charset.o)
  __nl_init_domain_conv in libintl.a(loadmsgcat.o)

然而,在这样做之后,我试图从头开始重建它(清理和所有东西),但后来它在不同的点上抱怨未定义的符号,但这次是_libiconv,_libiconv_open和_libiconv_close。

代码语言:javascript
复制
Undefined symbols for architecture x86_64:
  "_libiconv", referenced from:
    _identifier_to_locale in libbackend.a(pretty-print.o)
  "_libiconv_close", referenced from:
    _identifier_to_locale in libbackend.a(pretty-print.o)
  "_libiconv_open", referenced from:
    _identifier_to_locale in libbackend.a(pretty-print.o)

你知道我该怎么处理这件事吗?我已经找到了一些从MacPorts卸载libiconv的解决方案,但我不想这样做,因为我有许多依赖于它的端口。

EN

回答 5

Stack Overflow用户

发布于 2015-12-08 02:08:25

我通过以下方式解决了这个问题:

代码语言:javascript
复制
$ sudo port -f deactivate libiconv
$ ...build my project...
$ sudo port activate libiconv

可能有一种更好的方法,但我没有直接使用GCC,所以这是一个临时的解决方法。

票数 7
EN

Stack Overflow用户

发布于 2014-01-30 05:43:53

我通过包含来自/usr/lib/opt/local/lib的两个libiconv来解决这个问题。这是一个老生常谈的解决方法,如果有人有更好的解决方案,请张贴。假设[gcc-src]是gcc的源目录。我所做的如下:

/usr/lib中使用

  1. ,以libiconv1.*
  2. Go的身份将libiconv.*复制到[gcc-src]/gcc/Makefile.in

LIBINTL = @LIBINTL@更改为LIBINTL = @LIBINTL@ -L/opt/local/lib -liconv -L/usr/lib -liconv1

  • Configure by:CC=gcc-mp-4.7 CXX=g++-mp-4.7 ../gcc-4.7.2/configure --with-gmp=/opt/local --enable-languages=c,c++ --enable-checking=release —prefix=[gcc-src] <-必须是绝对地址。我用的是一台由gcc和g++制作的macport手机。也许使用system work too.

  • make

  • make install中的gcc和g++,二进制文件将在[gcc-src]/bin/

票数 3
EN

Stack Overflow用户

发布于 2013-10-02 03:36:21

看起来您的make clean实际上并没有从build目录中删除libbackend.a;您仍然试图链接到针对MacPorts编译的代码的旧版本。手动运行rm libbackend.a (或make distcleanmake spotless或其他任何可以真正清理所有内容的工具)可能会解决这个问题,对吧?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12619600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档