交叉编译 gettext 库:为 armv7a 重新链接时出错

Cross-compiling the gettext library: error when relinking for armv7a

我正在尝试交叉编译(对于 armv7a 和 aarch64,android)gettext 库(依赖于 glib)。配置编译成功,但安装时出现relink错误:

libtool: relink: /home/user/dev/android-ndk-r24/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi26-clang -shared  -fPIC -DPIC  .libs/libgettextsrc_la-message.o .libs/libgettextsrc_la-po-error.o .libs/libgettextsrc_la-po-xerror.o .libs/libgettextsrc_la-read-catalog-abstract.o .libs/libgettextsrc_la-po-lex.o .libs/libgettextsrc_la-po-gram-gen.o .libs/libgettextsrc_la-po-charset.o .libs/libgettextsrc_la-read-po.o .libs/libgettextsrc_la-read-properties.o .libs/libgettextsrc_la-read-stringtable.o .libs/libgettextsrc_la-open-catalog.o .libs/libgettextsrc_la-dir-list.o .libs/libgettextsrc_la-str-list.o .libs/libgettextsrc_la-read-catalog.o .libs/libgettextsrc_la-write-catalog.o .libs/libgettextsrc_la-write-properties.o .libs/libgettextsrc_la-write-stringtable.o .libs/libgettextsrc_la-write-po.o .libs/libgettextsrc_la-msgl-ascii.o .libs/libgettextsrc_la-msgl-iconv.o .libs/libgettextsrc_la-msgl-equal.o .libs/libgettextsrc_la-msgl-cat.o .libs/libgettextsrc_la-msgl-header.o .libs/libgettextsrc_la-msgl-english.o .libs/libgettextsrc_la-msgl-check.o .libs/libgettextsrc_la-file-list.o .libs/libgettextsrc_la-msgl-charset.o .libs/libgettextsrc_la-po-time.o .libs/libgettextsrc_la-plural-exp.o .libs/libgettextsrc_la-plural-eval.o .libs/libgettextsrc_la-plural-table.o .libs/libgettextsrc_la-sentence.o .libs/libgettextsrc_la-format.o .libs/libgettextsrc_la-format-c.o .libs/libgettextsrc_la-format-python.o .libs/libgettextsrc_la-format-python-brace.o .libs/libgettextsrc_la-format-java.o .libs/libgettextsrc_la-format-java-printf.o .libs/libgettextsrc_la-format-csharp.o .libs/libgettextsrc_la-format-javascript.o .libs/libgettextsrc_la-format-scheme.o .libs/libgettextsrc_la-format-lisp.o .libs/libgettextsrc_la-format-elisp.o .libs/libgettextsrc_la-format-librep.o .libs/libgettextsrc_la-format-ruby.o .libs/libgettextsrc_la-format-sh.o .libs/libgettextsrc_la-format-awk.o .libs/libgettextsrc_la-format-lua.o .libs/libgettextsrc_la-format-pascal.o .libs/libgettextsrc_la-format-smalltalk.o .libs/libgettextsrc_la-format-qt.o .libs/libgettextsrc_la-format-qt-plural.o .libs/libgettextsrc_la-format-kde.o .libs/libgettextsrc_la-format-kde-kuit.o .libs/libgettextsrc_la-format-boost.o .libs/libgettextsrc_la-format-tcl.o .libs/libgettextsrc_la-format-perl.o .libs/libgettextsrc_la-format-perl-brace.o .libs/libgettextsrc_la-format-php.o .libs/libgettextsrc_la-format-gcc-internal.o .libs/libgettextsrc_la-format-gfc-internal.o .libs/libgettextsrc_la-read-desktop.o .libs/libgettextsrc_la-locating-rule.o .libs/libgettextsrc_la-its.o .libs/libgettextsrc_la-search-path.o   -L/opt/android/armv7a-linux-androideabi26/lib -L/home/user/dev/sources/gettext-0.21/gettext-tools/intl/.libs -L/opt/android/armv7a-linux-androideabi26/lib -lgettextlib -ltextstyle -lm -lintl -liconv -lc  -g -O2   -Wl,-soname -Wl,libgettextsrc-0.21.so -o .libs/libgettextsrc-0.21.so-ltextstyle -lm -lintl -liconv -lc  -g -O2   -Wl,-soname -Wl,libgettextsrc-0.21.so -o .libs/libgettextsrc-0.21.so
ld: error: unable to find library -lgettextlib
clang-14: error: linker command failed with exit code 1 (use -v to see invocation)
libtool:   error: error: relink 'libgettextsrc.la' with the above command before installing it

同时其他库(libffi和libiconv)编译安装正常

gettext 版本:0.20.2 和 0.21
Android NDK 版本:r23b 和 r24
OS 版本:Ubuntu 20.04.4 LTS

我是这样配置编译安装的:

export DEV=${HOME}/dev
export NDK=$DEV/android-ndk-r23b
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
#export TARGET=aarch64-linux-android
export TARGET=armv7a-linux-androideabi
export API=26
export AR=$TOOLCHAIN/bin/llvm-ar
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export AS=$CC
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
export LD=$TOOLCHAIN/bin/ld
export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
export STRIP=$TOOLCHAIN/bin/llvm-strip
./configure --host $TARGET --prefix=/opt/android/$TARGET$API --disable-rpath --disable-libasprintf --disable-java --disable-native-java --disable-openmp --disable-curses
make
make install

如何解决这个问题?

谢谢!

我能够使用旧版本的 Android NDK (r15c) 编译这个库。基于Wireshark 3.4.0的编译。仅更改了以下环境变量:

export TARGET=aarch64-linux-android
export HOST=aarch64-eabi
export ARCH=arm64
export TOOLCHAIN=${TARGET}
export NDK_TOOLCHAIN=${DEV}/android-ndk-toolchain-${ARCH}-r15c