non-system libraries in linker flags(链接器标志中的非系统库)
问题描述
我有一个使用一些 C++ 和 OpenCV 的完整工作应用程序.它编译并成功运行.现在我只是想整理我的代码并进行更改以在编译时删除所有警告.但是有一个警告我不明白.我的 android.mk 似乎有问题.
I have a fully working app employing some C++ and OpenCV. It compiles and runs successfully. Right now I am just trying to tidy my code and make changes to remove all warnings at compile time. But there is one warning I don't understand. It appears to be a problem with my android.mk.
我编译的时候控制台输出如下:
When I compile, the console output is as follows:
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如下:
My android.mk is as follows:
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 中的任何位置.
I can't even work out where the "-lopencv_java" linker flag comes from, it doesn't appear anywhere in android.mk.
有什么想法吗?
回答 Alex Cohn 的问题.如果我在include $(CLEAR_VARS)"之前的行中添加$(info ==$(OPENCV_INSTALL_MODULES)==)",那么控制台会报告以下内容:
In response to Alex Cohn's question. If I add "$(info ==$(OPENCV_INSTALL_MODULES)==)" in the line preceding "include $(CLEAR_VARS)" then the console reports the following:
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
OpenCV.mk之前,你必须确保$(OPENCV_INSTALL_MODULES)
等于<强>开.您的 Android.mk
文件中有 OPENCV_INSTALL_MODULES:=on
行,但由于某种原因它不起作用.在不深入研究所有可能(和不可能)的问题的情况下,解决问题的一种简单方法是编写
Before you include
OpenCV.mk, you must make sure that $(OPENCV_INSTALL_MODULES)
is equal on. You have the line OPENCV_INSTALL_MODULES:=on
in your Android.mk
file, but for some reason it did not work. Without digging into all possible (and impossible) problems, an easy way to fix the problem is to write
override OPENCV_INSTALL_MODULES:=on
在您的 Android.mk
中;另一个 - 运行
in your Android.mk
; another - to run
ndk-build OPENCV_INSTALL_MODULES=on
从命令行.
这篇关于链接器标志中的非系统库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:链接器标志中的非系统库


基础教程推荐
- 在螺旋中写一个字符串 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01