Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正在重新编译libiconv,gettext未定义符号发生在已成功安装之后_C++_Macos_Shared Libraries_Libtool_Pkg Config - Fatal编程技术网

C++ 正在重新编译libiconv,gettext未定义符号发生在已成功安装之后

C++ 正在重新编译libiconv,gettext未定义符号发生在已成功安装之后,c++,macos,shared-libraries,libtool,pkg-config,C++,Macos,Shared Libraries,Libtool,Pkg Config,主要明显错误“架构x86\u 64的未定义符号” 如何使这些文件再次成功编译 操作系统为Mac OS X。已从安装了多个程序 他们的来源。安装后注意到问题: binutilsv2.25 libtoolv2.4.6 glibv2.45.2,或 pkgconfigv0.28 在安装上述任何一项之前,请重新编译libiconv和gettext 未产生任何错误,两个都已成功安装多次 pkg config--list all不显示libiconv或gettext (如果这意味着任何重要的事情) lib

主要明显错误“
架构x86\u 64的未定义符号”

如何使这些文件再次成功编译

操作系统为Mac OS X。已从安装了多个程序 他们的来源。安装后注意到问题:

  • binutils
    v2.25
  • libtool
    v2.4.6
  • glib
    v2.45.2,或
  • pkgconfig
    v0.28
在安装上述任何一项之前,请重新编译
libiconv
gettext
未产生任何错误,两个都已成功安装多次

pkg config--list all
不显示
libiconv
gettext
(如果这意味着任何重要的事情)

libiconv
gettext
是各自网站的直接副本

如果我没有为
gcc
指定
-m32
,则我收到以下错误:

$ gcc -I/usr/local/include -liconv -o test-iconv.exe test-iconv.c
Undefined symbols for architecture x86_64:
  "_libiconv_open", referenced from:
      _main in ccr9tTic.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
试图重新编译
libiconv

libiconv-1.14 $ make distclean; ./configure --enable-extra-encodings \
  --with-libiconv-prefix=/usr/local/include; make V=1 
...
...
...
gcc -DHAVE_CONFIG_H -DEXEEXT=\"\" -I. -I.. -I../lib  -I../intl \
    -DDEPENDS_ON_LIBICONV=1 -D DEPENDS_ON_LIBINTL=1 -I/usr/local/include  \
    -g -O2 -c strerror-override.c
rm -f libicrt.a
ar cru libicrt.a allocator.o areadlink.o careadlinkat.o malloca.o progname.o \
    safe-read.o width.o xmalloc.o xstrdup.o xreadlink.o canonicalize-lgpl.o \
    error.o lstat.o readlink.o stat.o strerror.o strerror-override.o
ranlib libicrt.a
cd src && make all
gcc -c -I. -I. -I.. -I../include -I./../include -I../srclib -I./../srclib \
    -I../lib -g -O2 -I/usr/local/include -DINSTALLDIR=\"/usr/local/bin\" \
    -DLOCALEDIR=\"/usr/local/share/locale\" ./iconv_no_i18n.c
/bin/sh ../libtool --mode=link gcc  -g -O2 iconv_no_i18n.o \
    ../srclib/libicrt.a ../lib/libiconv.la  -o iconv_no_i18n
libtool: link: gcc -g -O2 iconv_no_i18n.o -o .libs/iconv_no_i18n \
    ../srclib/libicrt.a ../lib/.libs/libiconv.dylib
ld: warning: ignoring file ../srclib/libicrt.a, file was built for archive 
    which is not the architecture being linked (x86_64): ../srclib/libicrt.a
Undefined symbols for architecture x86_64:
 "_program_name", referenced from:
     _main in iconv_no_i18n.o
     _usage in iconv_no_i18n.o
     _error in iconv_no_i18n.o
 "_rpl_strerror", referenced from:
     _error in iconv_no_i18n.o
 "_safe_read", referenced from:
     _convert in iconv_no_i18n.o
 "_set_program_name", referenced from:
     _main in iconv_no_i18n.o
 "_uc_width", referenced from:
     _update_line_column in iconv_no_i18n.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status 
make[1]: *** [iconv_no_i18n] Error 1
make: *** [all] Error 2
来自lipo的信息
: 正在链接的体系结构(x86_64):../srclib/libicrt.a

libiconv-1.14 $ lipo -info srclib/libicrt.a
input file srclib/libicrt.a is not a fat file
Non-fat file: srclib/libicrt.a is architecture: x86_64
gettext-0.19.5.1 $ lipo -info gettext-runtime/gnulib-lib/libgrt.a 
input file gettext-runtime/gnulib-lib/libgrt.a is not a fat file
Non-fat file: gettext-runtime/gnulib-lib/libgrt.a is architecture: x86_64
gettext
v0.19.5.1 来自lipo的信息 正在链接的体系结构(x86_64):../gnulib lib/libgrt.a

libiconv-1.14 $ lipo -info srclib/libicrt.a
input file srclib/libicrt.a is not a fat file
Non-fat file: srclib/libicrt.a is architecture: x86_64
gettext-0.19.5.1 $ lipo -info gettext-runtime/gnulib-lib/libgrt.a 
input file gettext-runtime/gnulib-lib/libgrt.a is not a fat file
Non-fat file: gettext-runtime/gnulib-lib/libgrt.a is architecture: x86_64

可能是您安装了gcc和ar的替代版本,并且它们位于标准位置(/usr/bin)之前的路径中


我过去也遇到过同样的问题,这篇文章帮助我解决了问题:

--libiconv前缀=/usr/local/include
看起来可疑。
iconv.h
安装在
/usr/local/include
。我还有
-I/usr/local/include
用于
gcc
以便
.c
文件可以访问它。对于所有的程序,我都没有更改它们的
--前缀=
来自
/configure--help
关于
libiconv
--带有libiconv前缀[=DIR]在DIR/include和DIR/lib中搜索libiconv
这就是我要的。将AR和RANLIB设置为/usr/bin中的版本就成功了。
gettext-0.19.5.1 $ make distclean; ./configure; make V=1
...
...
...
libtool: link: ( cd ".libs" && rm -f "libgnu.la" && ln -s "../libgnu.la" \
    "libgnu.la" )
Making all in src
gcc -DLOCALEDIR=\"/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I..  -I. \
    -I. -I.. -I../intl -I./../intl -I../gnulib-lib -I./../gnulib-lib \
    -I/usr/local/include -DINSTALLDIR=\"/usr/local/bin\" -g -O2 -c -o \
    gettext-gettext.o `test -f 'gettext.c' || echo './'`gettext.c
/bin/sh ../libtool  --tag=CC   --mode=link gcc \
    -DINSTALLDIR=\"/usr/local/bin\" -g -O2   -o gettext gettext-gettext.o \
    ../gnulib-lib/libgrt.a ../intl/libintl.la -L/usr/local/lib -liconv \
    -R/usr/local/lib  -Wl,-framework -Wl,CoreFoundation -L/usr/local/lib \
    -liconv -R/usr/local/lib  
libtool: link: gcc -DINSTALLDIR=\"/usr/local/bin\" -g -O2 -o .libs/gettext \
    gettext-gettext.o -Wl,-framework -Wl,CoreFoundation  \
    ../gnulib-lib/libgrt.a ../intl/.libs/libintl.dylib -L/usr/local/lib \
    -lc /usr/local/lib/libiconv.dylib
ld: warning: ignoring file ../gnulib-lib/libgrt.a, file was built for archive
    which is not the architecture being linked (x86_64): ../gnulib-lib/libgrt.a
Undefined symbols for architecture x86_64:
  "_close_stdout", referenced from:
      _main in gettext-gettext.o
  "_error", referenced from:
      _main in gettext-gettext.o
  "_gnu_basename", referenced from:
      _main in gettext-gettext.o  "_program_name", referenced from:
      _main in gettext-gettext.o
      _usage in gettext-gettext.o
  "_proper_name", referenced from:
      _main in gettext-gettext.o
  "_rpl_getopt_long", referenced from:
      _main in gettext-gettext.o
  "_rpl_optarg", referenced from:
      _main in gettext-gettext.o
  "_rpl_optind", referenced from:
      _main in gettext-gettext.o
  "_set_program_name", referenced from:
      _main in gettext-gettext.o
  "_xmalloc", referenced from:
      _expand_escape in gettext-gettext.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make[4]: *** [gettext] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
gettext-0.19.5.1 $ lipo -info gettext-runtime/gnulib-lib/libgrt.a 
input file gettext-runtime/gnulib-lib/libgrt.a is not a fat file
Non-fat file: gettext-runtime/gnulib-lib/libgrt.a is architecture: x86_64