Articles of 共享库

共享库文本段不可共享

我正在尝试将HWvideo加速添加到我的设备的cm10.2端口。 我没有得到任何的错误,但下面的错误,然后停止工作,显然没有任何错误。 /home/vektor/CM102/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/../lib/gcc/arm-linux-androideabi/4.7/../../../../arm-linux-androideabi/bin/ld: warning: shared library text segment is not shareable /home/vektor/CM102/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/../lib/gcc/arm-linux-androideabi/4.7/../../../../arm-linux-androideabi/bin/ld: error: treating warnings as errors collect2: error: ld returned 1 exit status make: *** [/home/vektor/CM102/out/target/product/s7300b/obj/SHARED_LIBRARIES/libamplayer_intermediates/LINKED/libamplayer.so] Error 1 make: *** Waiting for unfinished jobs…. 这是什么意思? 我应该使用限制性较低的标志进行编译还是更糟?

如何在Eclipse中包含预build的共享库

我有一个共享库libfoo.so,并需要在我的Android应用程序中使用它。 我的第一个尝试是在Android.mk中有: include $(CLEAR_VARS) LOCAL_MODULE := test LOCAL_SRC_FILES := test.cpp LOCAL_LDLIBS := -L$(PATH_TO_FOO) -lfoo include $(BUILD_SHARED_LIBRARY) 在我的活动中,我有: statis { System.loadLibrary("foo"); } 这build立正确,但是我注意到,创build的apk不包括libfoo.so(我也看到它不复制到libs / armeabi)。 我想这是因为我有UnsatisfiedLinkError执行我的应用程序时。 我在其他一些文章中看到,我需要添加$(PREBUILD_SHARED_LIBRARY),所以我将以下内容添加到我的Android.mk中: include $(CLEAR_VARS) LOCAL_MODULE:= foo LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so include $(PREBUILD_SHARED_LIBRARY) 但是现在我得到了构build错误: foo: LOCAL_SRC_FILES points to a missing file. 我相信这条路是正确的。 请注意,libfoo.so最终的版本号码,虽然我不得不删除它(只离开。so),因为ndk-build抱怨。 我究竟做错了什么?

重新使用arm共享库

我已经build立了ARM的android共享库(libtest.so)。 我有兴趣重复使用一个函数(这不是很多依赖关系 – 它只是创build类实例并调用两个方法)。 我想调用该函数(它需要一个std :: string参数)并获取返回的值。 有没有可能做这样的事情? 我没有任何头文件。 我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi , /lib/armeabi 。 在这一点上,我的cpp文件编译,但现在呢? 如果可能的话,我如何从libtest.so调用函数? 我知道它从objdump的名字 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= libtest LOCAL_SRC_FILES := libtest.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.cpp LOCAL_SHARED_LIBRARIES := libtest include $(BUILD_SHARED_LIBRARY) 编辑: 我试图从这个android.mk添加hello-jni示例的预build库: include $(CLEAR_VARS) LOCAL_MODULE:= libhello-jni LOCAL_SRC_FILES := libhello-jni.so include $(PREBUILT_SHARED_LIBRARY) 它的工作,但libtest.so相同的代码显示以下错误(开始时) UnsatisfiedLinkError: […]

将涓stream移植到android

我正尝试在android上移植Trickle( https://github.com/mariusaeriksen/trickle )。 我到目前为止所想到的是,我需要使用NDK独立工具链来交叉编译这个应用程序所依赖的各个库,主要是'libevent'。 从这篇文章得到了一些帮助 – http://warpedtimes.wordpress.com/2010/02/03/building-open-source-libraries-with-android-ndk/ 我已经设法用下面的“build_android.sh”脚本交叉编译libevent: export ANDROID_ROOT=/home/narayan/installations/android-ndk-r9d export PATH=$PATH:$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin export PATH=$PATH:$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/include #Since it complains about crtbegin and crtend ln -s $ANDROID_ROOT/platforms/android-19/arch-arm/usr/lib/crtbegin_so.o ln -s $ANDROID_ROOT/platforms/android-19/arch-arm/usr/lib/crtend_so.o ./configure \ –host=arm-linux-androideabi \ CC=$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux- androideabi-gcc \ LD=$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld \ AR=$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar \ RANLIB=$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ranlib \ CPPFLAGS="-I$ANDROID_ROOT/platforms/android-19/arch-arm/usr/include/" \ CFLAGS="-nostdlib" \ LDFLAGS="-Wl,-rpath-link=$ANDROID_ROOT/platforms/android-19/arch-arm/usr/lib/ -L$ANDROID_ROOT/platforms/android-19/arch-arm/usr/lib/" \ LIBS="-lc -lgcc -L$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.8" 现在,当我为涓stream应用程序做同样的事情时,我得到以下错误上面运行相同的脚本在涓滴项目目录 – checking build system […]

如何使用eclipse在Java中使用android本地库?

任何机构可以给我一个步骤,如何在eclipse中使用本地库。 你的帮助高度赞赏。 我不想创build任何本地库。 我只想使用预定义的库。

如何在Android Studio和NDK上使用extra * .so库

我正在尝试生成一个Android应用程序来使用一些额外的* .so库(特别是“libinterface.so”)。 这些库是从外部生成的,并作为依赖包含在从Java侧调用的包装类中。 该库存储在“src / main / jniLibs / armeabi-v7a”中。 系统将所有.so文件包含到生成的应用程序中。 以前,我使用Eclipse来达到这个目的,而且我可以使用这个库,但是我有问题要使用Android Studio来完成。 生成的错误是: /home/******/Libraries/android-sdk-linux/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/aarch64-linux-android/4.9/../../../../aarch64-linux-android/bin/ld: cannot find -linterface 由于错误是由链接器引发的,它看起来与库包含步骤有关。 在Eclipse上,我使用了一个'Android.mk'文件来包含新的库,但是我找不到用Gradle做这个的方法。 #Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libinterface-prebuilt LOCAL_SRC_FILES := prebuilt/libinterface.so include $(PREBUILT_SHARED_LIBRARY) 我试图用这个gradle定义来包含库(注意:我已经包括了最后的JNI支持和使用本教程的 gradle-experimental): … android.buildTypes { release { minifyEnabled = false proguardFiles.add(file('proguard-android.txt')) } } android.ndk { moduleName = "custom_wrapper_jni" cppFlags.add("-I" + […]

Android – 如何加载共享库?

我创build了最简单的EXECUTABLE和SHARED_LIBRARY。 不改变LD_LIBRARY_PATH就不加载SHARED_LIBRARY: # ./hello ./hello link_image[1995]: failed to link ./hello CANNOT LINK EXECUTABLE # LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./hello Hello, world! 所有代码如下: first.h #ifndef FIRST_H #define FIRST_H extern int first(int x, int y); #endif /* FIRST_H */ first.c #include "first.h" int first( int x, int y ) { return x + y; } 你好ç #include <stdio.h> #include "first.h" […]

使用Gradle在多个Android应用程序之间共享Android库

我有Android应用程序A和B.我想从每个提取重复代码到共享库L.我怎样才能使用Gradle做到这一点? 我曾经见过这个问题的一些排列,但是答案却很less。 最接近/最好的问题是这样的: 多个Android应用程序依赖于Android库与Gradle 第一个答案build议包含应用程序和库模块的父项目。 这种耦合是不受欢迎的,部分原因是A,B和L在他们自己的Git仓库中,也是因为它会涉及父项目和构build文件,这些文件难以放在源代码控制中(或者涉及手动复制其他项目)。 由于Android Studio在默认情况下喜欢单模块项目的父级构build,所以应该是一个简单的家族。 这真的好像是一个不相干的项目之间的不必要的耦合。 第二个答案涉及将AAR发布到回购库,并在每个项目中引用远程库。 如果我们有一个本地的Nexus存储库,那么我可以很好地使用这种方法,但似乎没有一个简单的方法来做到这一点,没有手动版本/命名和上传文件(这是不可持续的)。 我试图使用Sonatype gradle-release插件,但似乎是JAR(不是AAR)。 它看起来像是很多移动部件,相当于Android应用程序之间最基本的代码共享forms。 有没有人有更好的解决scheme?

集成一个外部的纯Java库并使Android类访问它

我有麻烦试图让我的外部Java项目,所以我也可以使用Android类。 该库已经集成在Android项目上。 例如:我有几个模型类,我想要实现Parcelable所以他们可以serialized相应,但没有Android类可用。 澄清我只是为了试图解决这个问题 到目前为止,我只试过: 更改和匹配外部库的包: Android中的包名称 com.domain.androidproject 图书馆的包装原来 com.domain.libproject 变成: com.dommain.androidproject.libproject 但到目前为止没有运气。 我导入库作为一个Gradle外部项目vía: compile project(path: ':LibProject') 感谢您的帮助。

Android库中的线程安全

我正在试图为Android系统实现一个本地共享库(.so)。 自然,有一些代码块需要线程安全。 我在这里发现,不支持pthread锁,互斥锁或条件variables。 我想知道在库级别通常使用什么来实现线程安全?