gpt4 book ai didi

android - 使用预构建的静态库进行 Android NDK 开发

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:56:54 25 4
gpt4 key购买 nike

我正在尝试构建一个使用来自某些现有 C++ 代码的静态库的 Android 应用程序。但是我似乎无法构建东西,这是我到目前为止采取的步骤..

我有 ndk-r5b 并根据 ndk/docs/STANDALINE-TOOLCHAIN.html 构建了独立的工具链。然后,我使用独立的工具链编译器 (arm-linux-androideabi-g++) 而不是 g++ 作为编译我需要的静态库的 Makefile 中的 CXX 标志。这编译没有错误,并产生了 3 个静态库。以下是用于构建预构建库的一些标志的代码 fragment :

CXX = arm-linux-androideabi-g++
SYSTEM_LIBS = -lstdc++ -lm
INCLUDE_PATH += ${NDK_PATH}/platforms/android-8/arch-arm/usr/include/

这是编译时从 makefile 生成的示例行:

arm-linux-androideabi-g++ -c -DTIME_SIM -I./include  -I/home/greg/dev/Android/android-ndk-r5b/platforms/android-8/arch-arm/usr/include/ -fpic -ggdb3 -SimTime.C -o SimTime.o

接下来,我使用 ndk-build 为 Android.mk 使用以下内容来构建应用程序:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := engine
LOCAL_SRC_FILES := ../libs/libEngine.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := shmem
LOCAL_SRC_FILES := ../libs/libShMem.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := util
LOCAL_SRC_FILES := ../libs/libUtil.a
include $(PREBUILT_STATIC_LIBRARY)

# build server as a shared library
include $(CLEAR_VARS)
LOCAL_MODULE := libServer
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../include

LOCAL_SRC_FILES := \
Server.C \
Router.C \
RouterMsgs.C \
Federation.C \
cripName.C \
ver.C \
JNIWrapper.cpp
LOCAL_STATIC_LIBRARIES := engine shmem util
include $(BUILD_SHARED_LIBRARY)

使用 android ndk 中提供的独立工具链编译器,预构建库可以很好地编译。但是,在使用 ndk-build 将共享库链接到预构建库时,有许多 Unresolved 对 ostream 的引用。例如:

/home/android/obj/local/armeabi/libShMem.a(SubscriptionItem.o): In function `SUBSCRIPTION_ITEM::Print(std::basic_ostream<char, std::char_traits<char> >&)':/home/src/comm/SubscriptionItem.C:97: undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'

我假设我在使用独立编译器进行编译时遗漏了一些重要的标志或没有做正确的事情,但是对于这个问题的任何帮助或见解将不胜感激,因为我似乎无法在谷歌或任何android ndk 文档。谢谢!

最佳答案

好吧,您实际上可以通过在与 Android.mk 文件相同的文件夹中创建一个 Application.mk 文件来解决这个问题,其中包含:

APP_STL := stlport_static

用于使用位于 Android NDK 内部的静态 STLport。

关于android - 使用预构建的静态库进行 Android NDK 开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6436482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com