链接器标志中的非系统库

3
我有一个完全可工作的应用程序,涉及一些C++和OpenCV技术。它能够成功编译和运行。现在我只是试图整理我的代码并进行更改,在编译时消除所有警告。但是有一个警告我不理解。它似乎是与我的android.mk文件有关。
当我编译时,控制台输出如下:
06:58:21 **** Incremental Build of configuration Default for project Motion ****
"C:\\android-ndk-r9c\\ndk-build.cmd" all 
Android NDK: WARNING:jni/Android.mk:mixed_sample: non-system libraries in linker flags: -lopencv_java    
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    
[armeabi-v7a] Compile++ thumb: mixed_sample <= cpp_part.cpp
[armeabi-v7a] SharedLibrary  : libmixed_sample.so
C:/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: warning: hidden symbol '__aeabi_atexit' in C:/android-ndk-r9c/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/libgnustl_static.a(atexit_arm.o) is referenced by DSO c:/opencv-2.4.8-android-sdk/sdk/native/jni/../libs/armeabi-v7a/libopencv_java.so
[armeabi-v7a] Install        : libmixed_sample.so => libs/armeabi-v7a/libmixed_sample.so

06:58:24 Build Finished (took 2s.515ms)

我的android.mk文件如下:

LOCAL_PATH := $(call my-dir)

# compile with profiling
LOCAL_CFLAGS := -pg

include $(CLEAR_VARS)

 OPENCV_CAMERA_MODULES:=off 
 OPENCV_INSTALL_MODULES:=on 
 OPENCV_LIB_TYPE:=SHARED

include c:\opencv-2.4.8-android-sdk/sdk/native/jni/OpenCV.mk

LOCAL_MODULE    := mixed_sample
LOCAL_SRC_FILES := cpp_part.cpp
LOCAL_LDLIBS +=  -llog -ldl -lz

LOCAL_STATIC_LIBRARIES := android-ndk-profiler

include $(BUILD_SHARED_LIBRARY)

$(call import-module,android-ndk-profiler)

我甚至不知道"-lopencv_java"链接标志来自哪里,它在android.mk中没有出现过。

有什么想法吗?

编辑:作为对Alex Cohn问题的回答。如果我在“include $(CLEAR_VARS)”之前的行中添加“$(info ==$(OPENCV_INSTALL_MODULES)==)” ,则控制台报告如下内容:

08:39:34 **** Incremental Build of configuration Default for project Motion ****
"C:\\android-ndk-r9c\\ndk-build.cmd" all 
====
Android NDK: WARNING:jni/Android.mk:mixed_sample: non-system libraries in linker flags: -lopencv_java    
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    
[armeabi-v7a] Compile++ thumb: mixed_sample <= cpp_part.cpp
[armeabi-v7a] SharedLibrary  : libmixed_sample.so
C:/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: warning: hidden symbol '__aeabi_atexit' in C:/android-ndk-r9c/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi-v7a/libgnustl_static.a(atexit_arm.o) is referenced by DSO c:/opencv-2.4.8-android-sdk/sdk/native/jni/../libs/armeabi-v7a/libopencv_java.so
[armeabi-v7a] Install        : libmixed_sample.so => libs/armeabi-v7a/libmixed_sample.so

08:39:36 Build Finished (took 2s.564ms)

请在“include”之前添加以下行:$(info ==$(OPENCV_INSTALL_MODULES)==),然后运行ndk-build并打印出其输出。 - Alex Cohn
1个回答

7
include OpenCV.mk之前,您必须确保$(OPENCV_INSTALL_MODULES)等于on。在您的Android.mk文件中有一行OPENCV_INSTALL_MODULES:=on,但由于某种原因它没有起作用。为了解决问题而不深入挖掘所有可能(和不可能)的问题,一个简单的方法是编写:
override OPENCV_INSTALL_MODULES:=on

在您的 Android.mk 文件中;另一个 - 运行

ndk-build OPENCV_INSTALL_MODULES=on

从命令行执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接