c++ - Android NDK - 共享库的链接器错误。

标签 c++ android-ndk shared-libraries

我想弄清楚为什么我不断收到对 android 附带的共享库中声明的函数的 undefined reference 。

我的application.mk和root android.mk

APP_MODULES    :=   adhoc
APP_STL := gnustl_shared
NDK_TOOLCHAIN_VERSION=clang3.1
APP_OPTIM    := debug

CUR_PATH := $(call my-dir)
LOCAL_CPPFLAGS += -std-c++11 -Wwrite-strings

include   $(CUR_PATH)/native/adhoc/Android.mk

临时 Android.mk

LOCAL_PATH := $(call my-dir)
updater_src_files := \
  install.cpp\
    sha1.cpp\
  addhoc_lib.cpp 


include $(CLEAR_VARS)

LOCAL_SRC_FILES := $(updater_src_files)

inc_path = $(NDK_ROOT)/../AndroidSource/system/core/include \
$(NDK_ROOT)/../AndroidSource/hardware/libhardware_legacy/include

LOCAL_C_INCLUDES += $(inc_path)

LOCAL_CFLAGS := -DINTERNAL_SHA1 -DCONFIG_CRYPTO_INTERNAL -DCONFIG_NO_T_PRF -DCONFIG_NO_TLS_PRF -std=c++11 -Wc++11-extensions -Wno-deprecated-writable-strings

LOCAL_STATIC_LIBRARIES := libedify

LOCAL_SHARED_LIBRARIES := libcutils\
              libhardware_legacy\
              libc\
              libnetutils\
              libsysutils

LOCAL_MODULE := adhoc

include $(BUILD_SHARED_LIBRARY)

$(call import-add-path, $(LOCAL_PATH))
$(call import-module, edify)

和 adhoc/edify/android.mk

LOCAL_PATH := $(call my-dir)

edify_src_files := \
    lexer.l \
    parser.y \
    expr.c

include $(CLEAR_VARS)

LOCAL_SRC_FILES := $(edify_src_files)

LOCAL_CFLAGS := $(edify_cflags)
LOCAL_MODULE := edify

include $(BUILD_STATIC_LIBRARY)

我从 ndk-build -B V=1 得到如下输出:

SharedLibrary  : libadhoc.so
/home/corey/Android_Dev/android-ndk-r8d/toolchains/llvm-3.1/prebuilt/linux-x86/bin/clang++ -Wl,-soname,libadhoc.so -shared --sysroot=/home/corey/Android_Dev/android-ndk-r8d/platforms/android-14/arch-arm ./obj/local/armeabi/objs-debug/adhoc/install.o ./obj/local/armeabi/objs-debug/adhoc/sha1.o ./obj/local/armeabi/objs-debug/adhoc/addhoc_lib.o ./obj/local/armeabi/libedify.a ./obj/local/armeabi/libgnustl_shared.so -gcc-toolchain /home/corey/Android_Dev/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86 -no-canonical-prefixes -target armv5te-none-linux-androideabi  -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now /home/corey/Android_Dev/android-ndk-r8d/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/libsupc++.a -lc -lm -o ./obj/local/armeabi/libadhoc.so

/home/corey/Android_Dev/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs-debug/adhoc/install.o: in function GetPropFn(char const*, State*, int, Expr**):jni/native/adhoc/install.cpp:463: error: undefined reference to 'property_get'

最佳答案

如果您使用的是 C++ 代码,则添加 C PLUS PLUS 标志。

#ifdef __cplusplus 
extern "C" {
#endif


#ifdef __cplusplus
}
#endif

另请参阅以下帖子。 android ndk undefined reference to a method

关于c++ - Android NDK - 共享库的链接器错误。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15330385/

相关文章:

c++ - 内联函数和静态内联函数之间的区别

android - 仅在 NDK 中读取文件时出现问题,写入文件时没有错误

opencv - 使用 OpenCv 保存时图像透明度变暗

XCode 构建错误“架构 x86_64 的未定义引用

c++ - std::bitset 位顺序是可移植的吗?

c++ - C++ 中的 SQLite char* 转换

c++ - 用于验证类型的动态转换

android - 从 NDK 获取应用程序名称

hadoop - 在 Spark 执行器节点上安装 Python 依赖项的最简单方法?

c++ - 如何从java调用现有的c++ dll