2013-03-11 95 views
0

我想弄清楚为什么我一直在android中附带共享库中声明的函数未定义引用。对共享库的Android NDK -Linker错误。

我application.mk和根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) 

和即席/陶冶/ 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 -BV = 1 like:

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' 

回答

1

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

#ifdef __cplusplus 
extern "C" { 
#endif 


#ifdef __cplusplus 
} 
#endif 

也看看下面的帖子。 android ndk undefined reference to a method

+0

嗯,我通过从手机上复制库并为构建系统提供了一条路径来实现它。我已经用extern“C”包装了头文件。 – 2013-03-12 18:16:59