重新编译libiconv, gettext在已经成功安装后出现未定义的符号
Recompiling libiconv, gettext undefined symbols occurring after an already successful install
主要明显错误" Undefined symbols for architecture x86_64
"
我如何使这些再次成功编译?
操作系统是Mac OS x他们的来源。注意到安装后出现的问题:
-
binutils
v2.25, -
libtool
v2.4.6, -
glib
v2.45.2, OR
pkgconfig
v0.28在安装上述任何一个之前,重新编译libiconv
和gettext
没有错误,并且都成功安装了多次。
pkg-config --list-all
不显示libiconv
和gettext
(如果这有什么意义的话)
libiconv
和gettext
是它们各自网站的直接副本。
http://www.gnu.org/software/libiconv/下载
iconv --version
iconv (GNU libiconv 1.14)
Copyright (C) 2000-2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Bruno Haible.
http://ftp.gnu.org/pub/gnu/gettext/
gettext --version
gettext (GNU gettext-runtime) 0.19.5.1
Copyright (C) 1995-1997, 2000-2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Ulrich Drepper.
libiconv
v1.14
试图在一个简单的.c
文件中使用libiconv
:
#include <iconv.h>
// works: gcc -m32 -I/usr/local/include -liconv -o test-iconv.exe test-iconv.c
// does NOT work: gcc -I/usr/local/include -liconv -o test-iconv.exe test-iconv.c
int main(int argc, char **argv) {
iconv_t conv = iconv_open("ISO8859-1", "UTF-8");
if (conv != (iconv_t) -1) {
return 0;
}
return 1;
}
如果我没有为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
:
architecture being linked (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
v0.19.5.1
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
lipo
信息
architecture being linked (x86_64): ../gnulib-lib/libgrt.a
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)之前的路径中。
我过去也遇到过同样的问题,这篇文章帮助我解决了这个问题:https://www.unix.com/programming/253809-linker-errors-linking-files-os-x.html
相关文章:
- 在Ubuntu 16.04上安装Cilk时出现问题
- cmake在我的项目中所需的所有静态库都不成功
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- C++:如何在CLion IDE中安装Boost
- 如何让LLDB在成功时退出,在失败时等待
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 安装opencv失败-粘贴CMakeError.log的内容
- 在cygwin中测试新的boost安装时出现cpp错误
- 有人安装"IITB Simplecpp in mac"吗?
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 我可以在 Arduino 的库文件夹之外安装库吗?
- 首先我已经成功安装了 caffe,但是当我运行一个 caffe 项目时,cmake 还可以,后来会发出很多错误
- 在MaxOSX10.12.4上成功安装OpenCV3,但它不起作用
- 我的应用已成功安装在 Android 上,但加载后立即崩溃
- 未安装的包上的 CMake "find_package"命令意外成功
- Windows安装程序,成功执行后自定义操作出现错误2896
- 无法成功安装 Boost.Python
- 重新编译libiconv, gettext在已经成功安装后出现未定义的符号
- 安装gcc 4.7,但无法成功运行程序