精华内容
下载资源
问答
  • 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

    展开全文
  • 1.将py 移入python所在文件夹。 我的是C:\Users\22198\AppData\Local\Programs\Python\Python39\Lib\site-packages 前面可能不同,但是后面的一般相同。 2、打开cmd切换到目前文件夹 命令是:cd C:\Users\22198...

    如果有两个py文件尽量放在一个文件内

    具体方法如下:

    1.将py 移入python库所在文件夹。

    我的是C:\Users\22198\AppData\Local\Programs\Python\Python39\Lib\site-packages

    前面可能不同,但是后面的一般相同。

    2、打开cmd切换到目前文件夹 命令是:cd C:\Users\22198\AppData\Local\Programs\Python\Python39\Lib\site-packages

    3、输入pyinstaller [文件名].py

    相关的参数百度了解

    4、在名为dist的文件夹下找到生成的exe文件

    展开全文
  • 安卓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;
    
    }
    
    展开全文
  • 今天小编就为大家分享一篇关于Linux程序运行时加载动态库失败的解决方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • QT 动态库加载失败

    千次阅读 2014-11-12 14:39:50
    手动封装DLL,然后通过Qlibrary 加载,老是提示
  • c++调用动态库失败解决办法

    千次阅读 2017-09-04 16:09:44
    在程序中我发现LoadLibrary()返回的句柄是空的,于是用GetLastError()看了一下,返回值是193,因此可以断定应该是动态库出问题了,所以就用Depends查看了一下程序中依赖的动态库,发现该动态库还缺少另外的一个...
  • 系统app使用动态库时,打包进apk中的动态库无法加载,加载失败,运行时报错本地方法找不到,动态库加载失败。加载的时候会到/system/lib与/vendor/lib下去找动态库去加载,所以需要将动态库放入这两个文件夹下,静态...
  • 一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享的错误, 比如: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
  • 使用动态库编译链接main.c后,得到名为main的可执行程序。但是在运行main可执行程序时,程序报错: ./main: error while loading shared libraries: libcalc.so: cannot open shared object file: No such file or ...
  • 加载动态库失败的原因分析

    千次阅读 2014-01-22 13:21:34
    加载动态库有几方面的原因。归纳如下: 1)动态库路径错误。 2)动态库依赖缺失。这个可以利用depends工具看下依赖情况。如果缺失,请寻找相应库,然后把相应库放在程序同一目录下,或者放在system32目录下。 3)...
  • 加载动态库失败,返回126错误码

    万次阅读 2016-05-16 16:41:54
    用LoadLibrary实现动态加载类,花了很多时间在dll的路径问题上。 在传入相对路径时,文件的查找顺序比较诡异,在XP sp2以后首先是系统目录开始搜索,以前是首先从当前目录开始搜索。微软认为当前目录是不安全的。...
  • Mac 动态库加载不上

    2018-02-12 13:42:00
    1 targer- build phase :link binary with library添加动态库 注意不要将后边的选项选成optional ,那样虽然能编译运行,但是实际上并没有加载上,用不了 2 注意此时该页面左上角有一个加号,点击会出现copy file ...
  • MAC动态库加载问题

    千次阅读 2020-07-10 13:53:03
    即便你把动态库放到了.app的包里面了,在打开app运行时还是不能加载。因此会产生dyld: Library not loaded的问题。 2,掌握下mac xcode里面的几个路径含义: @executable_path 这个变量表示可执行程序.
  • 当在开放环境下,安装有oracle客户端,而且一直提示动态库初始化失败的时候。 可以考虑把动态库放到 D:\oracle\product\10.2.0\client_1\BIN 目录下试试。 或者考虑把动态库放到C:\Sybase\Shared\PowerBuilder ...
  • 程序运行时有以下错误 ./dom1: error while loading shared libraries: libmemcached.so.11: cannot open shared object ...动态库加载失败 1、首先应该使用命令查看所加载的库 ldd ./dom1 linux-vdso.so.1 =...
  • 【1】LoadLibrary加载动态库失败的可能原因以及解决方案: (1)dll动态库文件路径不对。此场景细分为以下几种情况: 1.1 文件路径的确错误。比如:本来欲加载的是A文件夹下的动态库a.dll,但是经过仔细排查原因...
  • 问题说明:TranBaowenInfo.dll 是自己编写的动态链接中导出函数名为GetTranslateInfo(),调试时一直提示加载库成功(ok dll),但是加载库中导出函数一直失败(shibai func)。 typedef bool (*...
  • java程序中加载动态链接文件方法,涉及到C语言实现控制底层硬件的方法
  • 在Visual Studio 2017下实现动态库加载

    千次阅读 2018-07-30 17:54:05
    在开发与测试中,有时需要...以下是我在Visual Studio 2017环境下实现的动态库加载实验。 本文参考例程:https://blog.csdn.net/qq_28249373/article/details/76098914 首先我们需要建立DLL工程,生成自己的动态链...
  • 野生编程学习者在编程过程中需要用到一个dll文件,拷贝过来之后进行注册时怎么也不行,在网上查了各种资料,试了各种方法还是不行,总是出现以下错误: 无奈之下请教了专业人士,建议把dll文件放到其他盘,C盘...
  • 网上一搜一大堆,我的问题是,由于我的动态库链接了zlib的动态库,可能是unity对zlib的加载有问题,如果出现加载不了的情况,及其有可能是c++动态库加载了其他不兼容的动态库,我在项目里面把依赖的动态库都改成了...
  • 实际开发中遇到一个小问题,以QLibrary、LoadLibrary 方式载入动态库,调试的时候能正常调用库,但单独运行程序就不行;其实问题不大,但是不注意就搞掉你大半天时间; 以下为使用场景: 自己封装了一个动态库名为A ,A...
  • 出现动态库文件加载不了的情况,两种情况 1、这个库不存在加载目录中 2、缺少依赖支持项 使用工具:Depends.exe 使用教程: -------------------------------------------------------------...
  • 背景 项目是springboot项目。其中,涉及加密功能由...但移到linux系统中后(动态库格式xx.so),就会报动态库找不到错误。项目终归是要部署在服务器上,故下文只介绍在linux系统中解决过程。报错截图如下 linu..
  • 今天在不同的电脑用mfc使用LoadLibrary调用qt的动态库,在某些电脑成功,某些电脑又失败。开始以为是宽字符的原因。可以看到在UNICODE编码下,LoadLibrary实际上是LoadLibraryW。 于是改成 HMODULE hDll = ...
  • 动态库加载失败可能缺少一些其它的依赖库,本工具可以直接检测出所缺少的需要依赖库

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 143,705
精华内容 57,482
关键字:

动态库加载失败