链接期间 Android NDK undefined reference

标签 android android-ndk makefile

我正在尝试将由 ndk-build 创建的可执行文件链接到已使用 NDK 构建的现有 .so 库。这是我的 Android.mk 文件:

LOCAL_PATH := $(call my-dir)/..
include $(CLEAR_VARS)
LOCAL_MODULE := mini_executor
LOCAL_C_INCLUDES := ../..
LOCAL_SRC_FILES := main.cpp
LOCAL_CXXFLAGS += -std=c++11
LOCAL_STATIC_LIBRARIES := mylib
include $(BUILD_EXECUTABLE)

当我尝试构建它时,我收到了大量 undefined reference ,这对我来说意味着链接过程不起作用。果然,如果我在 ndk-build 上启用开关 V=1,我会看到以下几行:

"Compile++ thumb : mini_executor <= main.cpp
C:/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++ -MMD -MP -MF ./obj/local/armeabi/objs/mini_executor/main.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -march=armv5te -mtune=xscale -msoft-float -fno-exceptions -fno-rtti -mthumb -Os -g -DNDEBUG -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -I../.. -IC:/android-ndk-r9/sources/cxx-stl/gnu-libstdc++/4.6/include -IC:/android-ndk-r9/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include -IC:/android-ndk-r9/sources/cxx-stl/gnu-libstdc++/4.6/include/backward -Ijni/.. -DANDROID  -Wa,--noexecstack -Wformat -Werror=format-security  -std=c++11    -IC:/android-ndk-r9/platforms/android-3/arch-arm/usr/include -c  jni/../main.cpp -o ./obj/local/armeabi/objs/mini_executor/main.o 
Executable     : mini_executor
C:/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++ -Wl,--gc-sections -Wl,-z,nocopyreloc --sysroot=C:/android-ndk-r9/platforms/android-3/arch-arm ./obj/local/armeabi/objs/mini_executor/main.o C:/android-ndk-r9/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/libgnustl_static.a -lgcc -no-canonical-prefixes  -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now   -lc -lm -o ./obj/local/armeabi/mini_executor

我唯一注意到的是,在这些命令中,没有任何关于链接到我在 .mk 文件中指定的现有 .so 文件的内容。我试过同时使用 LOCAL_SHARED_LIBRARIESLOCAL_STATIC_LIBRARIES,但两者都没有任何作用。它似乎甚至没有尝试链接到图书馆。我在这里缺少什么?

最佳答案

您需要在 Android.mk 文件中添加如下内容:

include $(CLEAR_VARS)
LOCAL_MODULE := mylib
LOCAL_SRC_FILES := <path_to_mylib>/libmylib.a
include $(PREBUILT_STATIC_LIBRARY)

这允许您的预构建静态库包含在您的项目中。

查看 docs/PREBUILTS.html 了解更多信息。

关于链接期间 Android NDK undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18408706/

相关文章:

使用不同的CFLAGS为不同的目标编译通用的C文件

android - google-api-v2 中的 Mapview 在 android 中带有圆角

java - 在游戏关闭时处理 libGDX 资源?

android - 错误 : Program "/ndk-build.cmd" is not found in PATH

Android:打开相机并获取C级别的原始数据

安卓NDK : How to get screen resolution in native binary?

c - 使用 makefile 避免不必要的重新编译

c++ - NMake 模式规则

android - 桌面版 GCM 客户端

android - 更新 Google Play 服务后黑屏 :7. 5.0