如何在Android(NDK)中构建c-ares库

9

请问有人可以告诉我如何在Android上构建C-ares库(ndk-build)吗?

1个回答

14

以下是使用NDK独立工具链构建ARMv7静态库的步骤:

export NDK=/tmp/android-ndk-r8b

# Create the standalone toolchain
$NDK/build/tools/make-standalone-toolchain.sh \
--platform=android-9 \
--install-dir=/tmp/my-android-toolchain

export PATH=/tmp/my-android-toolchain/bin:$PATH
export SYSROOT=/tmp/my-android-toolchain/sysroot
export CC="arm-linux-androideabi-gcc --sysroot $SYSROOT"

# Download the latest release
curl -O http://c-ares.haxx.se/download/c-ares-1.9.1.tar.gz
tar xvfz c-ares-1.9.1.tar.gz

# Configure
cd c-ares-1.9.1 && mkdir build
./configure --prefix=$(pwd)/build \
--host=arm-linux-androideabi \
--disable-shared \
CFLAGS="-march=armv7-a"

# Build and install
make && make install

就是这样。静态库已经部署在build/lib/libcares.a下。

如果您的目标架构不同(例如armeabix86),请使用正确的-march值重复执行configure并为每个架构重新构建库。此外,可以自由地:

  • 根据您的需求调整目标平台(这里是Android 2.3,即API级别9),
  • 使用适合您需求的configure选项(例如,您可能希望除了构建动态库之外,还可以启用/禁用某些功能等)。

我按照您网站上有关构建第三方库的流程进行了操作。我编译了 gsl 库,并且成功编译了,但是当我运行应用程序时,它会给出运行时错误,指出 can not locate cblas_sdsdot。 我使用 nm 命令检查后发现变量存在于库中。请问您有何建议,同时非常抱歉唤起这个 3 年前的问题。 - Saad Saadi
我认为这个问题值得在StackOverflow上专门提出,因为你显然不是关注c-ares而是gsl,对吧? - deltheil
这是我的问题链接。我在这里询问之前今天发布了它。http://stackoverflow.com/questions/30727709/gsl-nm-outputs-undefined-symbol-u?noredirect=1#comment49530515_30727709 - Saad Saadi
你好,如果我想为x86构建一个静态库,我应该如何替换-march?当我将其更改为“-march = i686”或“-march = x86”时,我会收到错误消息“error: ahost-ares_getopt.o:不兼容的目标”。 - wqycsu
有没有想法如何在arm64架构上实现这个?看起来并不像我希望的那么简单。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接