精华内容
下载资源
问答
  • 系统app使用动态库时,打包进apk中的动态库无法加载,加载失败,运行时报错本地方法找不到,动态库加载失败。加载的时候会到/system/lib与/vendor/lib下去找动态库去加载,所以需要将动态库放入这两个文件夹下,静态...
    系统app使用动态库时,打包进apk中的动态库无法加载,加载失败,运行时报错本地方法找不到,动态库加载失败。加载的时候会到/system/lib与/vendor/lib下去找动态库去加载,所以需要将动态库放入这两个文件夹下,静态库未测,应该也差不多吧,不对请指正。
    
    展开全文
  • 1.动态库和静态库的原理 GCC进行链接时,会把静态库中的...2.动态库加载失败的原因 下面通过ldd命令查看main的动态库依赖关系: 可以看到列出了用到的4个动态库。 上面提到的动态载入器eld-linux.so即最后一...

    目录

    1.动态库和静态库的原理

    2.动态库加载失败的原因

    3.解决方法

    3.1 DT_RPATH段

    3.2将libcalc.so的路径加入到环境变量LD_LIBRARY_PATH中

    3.3将libcalc.so的路径加入到/etc/ld.so.cache文件列表中

    3.4将libcalc.so直接放到/lib/、/usr/lib目录中


    1.动态库和静态库的原理

    GCC进行链接时,会把静态库中的代码放到可执行程序中。但是对于动态库,不会把代码放到可执行程序中,只会把一些相关信息(如动态库的名字等)放到可执行程序中。运行的时候,如果用到了动态库中的内容,在可执行程序中是找不到的。导致错误出现。

    注:执行时如果用到了动态库中的API,动态库会被加载到内存中。


    2.动态库加载失败的原因

    下面通过ldd命令查看main的动态库依赖关系:

    可以看到列出了用到的4个动态库。

    上面提到的动态载入器eld-linux.so即最后一个动态库。

    因为动态载入器在DT_RPATH段、环境变量LD_LIBRARY_PATH等中找不到libcalc.so的绝对路径,所以会报错。


    3.解决方法

    将libcalc.so的路径加入到DT_RPATH段、LD_LIBRARY_PATH、/etc/ld.so.cache文件列表或者将libcalc.so直接放到/lib/、/usr/lib目录中

    3.1 DT_RPATH段

    DT_RPATH段我们改变不了,直接下一个。

    3.2将libcalc.so的路径加入到环境变量LD_LIBRARY_PATH中

    方式1:在终端直接加 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/wcj/projec/lesson4/library/lib

    即先获取原来的环境变量,再在后面加上动态库的路径

    但是该终端关闭后,值之前加的环境变量就失效了,打开新终端之后又得重新弄。

    下面讲永久配置,分为两种方式:用户级别的配置和系统级别的配置


    方式2:永久配置---用户级别

    打开.bashrc文件:

    (vi中,shift+G可以跳到最后一行,小写的o可以向下插入一行)

    在最后一行插入:

    保存之后,使修改生效:

    第一个点相当于source,也可以写成“source .bashrc”

    回到原来的目录,发现可以运行:


    方式3:永久配置--系统级别

    配置之前,先把上面配置的删掉。并重新打开一个终端,防止上一步潜在的影响。

    打开/etc/profile文件:

    在最后一行添加:

    使修改生效:

    回到原来的目录中,可以执行,如下图:


    3.3将libcalc.so的路径加入到/etc/ld.so.cache文件列表中

    先将上面的修改删除,再重新打开一个终端

    先尝试打开/etc/ld.so.cache:

    发现不能编辑,如下图:

    既然不能直接修改这个文件,那就间接修改:

    添加动态库的路径:

    保存之后,更新:

    回到原来的目录,可以执行,如下图:


    3.4将libcalc.so直接放到/lib/、/usr/lib目录中

    最后一种不建议使用。因为这两个目录中保存的是系统的库文件,防止对其误操作。


    参考:牛客网 C++高薪求职项目《Linux高并发服务器开发》1.7/1.8动态库加载失败的原因和解决

    专属优惠链接:

    https://www.nowcoder.com/courses/cover/live/504?coupon=AvTPnSG

    展开全文
  • 安卓App在启动或运行时经常会遇到.so动态库加载失败的情况,其中具体分2种情况: 1.在程序启动时加载失败,这时候就需要用Relinker去重新加载,可以看我的另外2篇博文:Relinker源码分析、Android安卓本地库加载程序...

    安卓App在启动或运行时经常会遇到.so动态库加载失败的情况,其中具体分2种情况:

    1.在程序启动时加载失败,这时候就需要用Relinker去重新加载,可以看我的另外2篇博文:Relinker源码分析Android安卓本地库加载程序Relinker简单封装

    2.在程序运行过程中,已经加载好的.so库被卸载,导致使用的时候找不到符号,这种情况下就要在运行过程中,需要用到库的时候重新去加载

    第2种情况主要操作思路是:

    • 1.尝试跑native方法
    • 2.捕获异常,如果没有异常说明运行成功
    • 3.如果有异常,那就重新加载.so动态库
    • 4.加载完后重新运行native方法

    来个例子🌰:

    • 公共基类:
    import android.content.Context;
    import com.getkeepsafe.relinker.ReLinker;
    
    public class NativeBaseClass {
        private static Context sContext = null;
    
        /**
         * 加载动态库方法
         */
        private static void loadLibrary() {
            if (sContext != null) {
                ReLinker.loadLibrary(sContext, "myLibrary");
            } else {
                System.loadLibrary("myLibrary");
            }
        }
    
        static {
            //在第一次访问这个类时,就会去加载动态库。这段代码只会运行一次
            loadLibrary();
        }
    
        /**
         * 尝试运行native方法,失败时会重新加载动态库
         * @param runnable 里面包含需要运行的native方法
         */
        public static void tryRunNativeFunction(Runnable runnable) {
            try {
                runnable.run();
            } catch (Throwable e) {
                loadLibrary();
                runnable.run();
            }
        }
    }
    
    • 子类:实际功能方法
    public class MyClass extends NativeBaseClass {
    
    	public void func() {
    		NativeBaseClass.tryRunNativeFunction(new Runnable() {
                @Override
                public void run() {
                    nativeFunc();
                }
            });
    	}
    
    	private static native void nativeFunc();
    }
    
    展开全文
  • 动态库加载失败测试

    2020-04-17 09:38:33
    编译的c动态库,在java调用时出现加载失败的情况,如何定位问题点? 可以通过dlopen在c层测试是否能正确加载 参考链接:https://www.jianshu.com/p/72cc08405a5a 测试代码: #include <stdio.h> #include &...

    编译的c动态库,在java调用时出现加载库失败的情况,如何定位问题点?
    可以通过dlopen在c层测试是否能正确加载
    参考链接:https://www.jianshu.com/p/72cc08405a5a
    测试代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <dlfcn.h>
    
    const char *dllPath = "./libXXX.so"
    
    int main()
    {
        void *handle = dlopen(dllPath,RTLD_LAZY);
        if(!handle)
        {
            fprintf( stderr, "[%s](%d) dlopen get error: %s\n", __FILE__, __LINE__, dlerror() );
            exit( EXIT_FAILURE );
        }
    
        printf("load libXXX success\n");
        dlclose(handle);
        return 0;
    
    }
    
    展开全文
  • 程序运行时有以下错误 ./dom1: error while loading shared libraries: libmemcached.so.11: cannot open shared object ...动态库加载失败 1、首先应该使用命令查看所加载的库 ldd ./dom1 linux-vdso.so.1 =...
  • QT 动态库加载失败

    千次阅读 2014-11-12 14:39:50
    手动封装DLL,然后通过Qlibrary 加载,老是提示
  • 使用动态库编译链接main.c后,得到名为main的可执行程序。但是在运行main可执行程序时,程序报错: ./main: error while loading shared libraries: libcalc.so: cannot open shared object file: No such file or ...
  • PHP启动:动态库加载失败...

    千次阅读 2017-11-29 20:42:00
    今天在linux上面智障一般搞了好久,本来想安装个swoole的,然后用 php -m 的命令想看下安装的PHP扩展,发现有的扩展有的可以出来,有的加载失败,  加载失败的错误类型: ...
  • 安装pacemakerrpm包后,遇到启动失败的情况,原因和动态链接加载有关,以下是详细。问题编译生成pacemaker 1.1.15的rpm包,然后在其它机器上安装pacemaker rpm包后,启动失败。[root@srdsdevapp73 ~]# service ...
  • 安装pacemakerrpm包后,遇到启动失败的情况,原因和动态链接加载有关,以下是详细。 问题 编译生成pacemaker 1.1.15的rpm包,然后在其它机器上安装pacemaker rpm包后,启动失败。 [root@...
  • LoadLibrary加载动态库失败的可能原因以及解决方案: (1)dll动态库文件路径不对。此场景细分为以下几种情况: 1.1 文件路径的确错误。比如:本来欲加载的是A文件夹下的动态库a.dll,但是经过仔细排查原因,发现a...
  • 网上一搜一大堆,我的问题是,由于我的动态库链接了zlib的动态库,可能是unity对zlib的加载有问题,如果出现加载不了的情况,及其有可能是c++动态库加载了其他不兼容的动态库,我在项目里面把依赖的动态库都改成了...
  • 用户使用我们行业软件,打开程序出现:msxml4.dll加载失败,程序退出! 故障系统: XP 解决方案: ①从互联网上下载msxml4.dll文件,放至对应目录,XP为:C:\Windows\System32 ②用cmd运行:regsvr32 msxml4.dll ...
  • 加载动态库失败

    2012-11-26 17:24:31
    我用depends工具看了这个动态库的依赖库文件,在system32目录下都有,麻烦各位高手指点啊! 还有这个控件在使用IE6/IE8浏览器的时候安装了控件也没有用,是什么原因啊,我已经把浏览器安全等级设为中了,虚心求教...
  • libevent-1.4.so.2动态链接库加载失败

    千次阅读 2016-05-09 13:52:10
    问题描述: ./server: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory 问题原因: ...LD_DEBUG=libs ./server -v > log 2>&1 ...
  • 今天小编就为大家分享一篇关于Linux程序运行时加载动态库失败的解决方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 381
精华内容 152
关键字:

动态库加载失败