2013-10-05 63 views
6

我有一个用C++编写的Android项目,并且在链接阶段有问题。代码放在一些应该链接在一起的静态库中。Android:如何正确链接我自己的静态库?

我在网上发现了很多关于这个主题的问题和答案,其中大多数人建议将我的库放到Android.mk文件中的LOCAL_STATIC_LIBRARIES。但是,如果我这样做,我发现LOCAL_STATIC_LIBRARIES的内容被忽略:我的库没有链接,并且在这里添加任何虚拟文本都不会生成任何错误或警告消息。

我试着这样说:

LOCAL_STATIC_LIBRARIES := MyLib.a 

或完整路径:

LOCAL_STATIC_LIBRARIES := $(LOCAL_PATH)/MyLib.a 

没有一次成功。

如果我把我的静态库放到LOCAL_LDLIBS那么它被链接了,但是我得到了一个关于使用非系统库的警告消息,并且可能构建将是错误的。

我Android.mk文件的内容是:

LOCAL_LDLIBS := $(LOCAL_PATH)/MyLib.a ... 

,我得到这个消息:

Android NDK: WARNING:jni/Android.mk:myapp: non-system libraries in linker flags: jni/MyLib.a  
Android NDK:  This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES  
Android NDK:  or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the  
Android NDK:  current module  

我找不到如何使用LOCAL_STATIC_LIBRARIES正确的方式,请帮帮我!

我的Android NDK-R9和Android的sdk_r22.2.1在OpenSuSE的x86和使用目标= Android的18

+0

你好你解决你的问题,包括它?因为我也面临着同样的问题。如果你能帮助我 /// –

回答

1

最有可能的问题在于,你是给图书馆的延伸:

LOCAL_STATIC_LIBRARIES := MyLib.a 

我想,这应该写成:

LOCAL_STATIC_LIBRARIES := MyLib 
5

见JBL的回答here

LOCAL_STATIC_LIBRARIES变量不能以这种方式工作。首先,你需要定义你希望库包括一节:

include $(CLEAR_VARS) 
LOCAL_PATH = . 
LOCAL_MODULE := curl 
LOCAL_EXPORT_C_INCLUDES := ../curl/include 
LOCAL_SRC_FILES := ../curl/lib/libcurl.a 
include $(PREBUILT_STATIC_LIBRARY) 

然后,您可以使用

include $(CLEAR_VARS) 
LOCAL_MODULE = mylib 
CFLAGS = ... 
... 
LOCAL_STATIC_LIBRARIES = curl 
include $(BUILD_STATIC_LIBRARY)