精华内容
下载资源
问答
  • linux下查看so或可执行程序的依赖库 Linux下可执行程序包括可执行程序exe和so, 两者文件都是ELF打头的。 objdump -x libxxxxx.so | grep NEEDED objdump -x 可执行程序名 | grep NEEDED 或 arm-hisiv300-linux-...
  • linux执行文件时找不到.so

    千次阅读 2018-10-08 13:35:49
    执行文件的时候提示找不到.so,只需要: 1.打开下面的文件 sudo gedit /etc/ld.so.conf 2. 在打开的文件中添加你的.so文件所在的目录,添加完效果如下 include /etc/ld.so.conf.d/*.conf  /home/wxw/...

    在执行文件的时候提示找不到.so,只需要:

    1.打开下面的文件

    sudo gedit /etc/ld.so.conf

    2.

    在打开的文件中添加你的.so文件所在的目录,添加完效果如下

    include /etc/ld.so.conf.d/*.conf 
    /home/wxw/modbusqt/modbussolibrary/build-RobotInterface-Desktop_Qt_5_11_0_GCC_64bit-Release

    第一行原来就有,然后回车写第二行,不是空格也不用加include(这里我折腾了好久)

    3.保存,然后

    sudo ldconfig

    就大功告成了。

     

    检查方法,

    ldd ./filename

    可以看到.so都能找到了。

    展开全文
  • linux编译so

    千次阅读 2018-03-29 08:50:54
    一、动态库so的编译 以一个例子来说明。 这里有三个so_test.h, test_a.c, test_b.c #ifndef _SO_TEST_H_ #define _SO_TEST_H_ void test_a(); void test_b(); void test_c(); #endif /* _SO_TEST_H_ */#include ...

    一、动态库so的编译

    以一个例子来说明。 这里有三个so_test.h, test_a.c, test_b.c

    #ifndef _SO_TEST_H_
    #define _SO_TEST_H_
    
    void test_a();
    void test_b();
    void test_c();
    
    #endif	/* _SO_TEST_H_ */
    #include <stdio.h>
    #include "so_test.h"
    
    void test_a()
    {
        printf("this is in test_a \n");
    }
    #include <stdio.h>
    #include "so_test.h"
    
    void test_b()
    {
        printf("this is in test_b \n");
    }

    将这几个文件编译成一个动态库:libtest.so

    gcc test_a.c test_b.c -fPIC -shared -o libtest.so

    分析:-fPIC是位置无关码,-shared是按照共享库的方式来链接


    二、动态库so的链接

    例子: main.c 调用libtest.so库

    #include <stdio.h>
    #include "so_test.h"
    
    int main(void)
    {
    	test_a();
    	test_c();
    	test_b();
    	return 0;
    }

    将main.c与动态库libtest.so链接生成执行文件main

    gcc main.c -L. -ltest -o main

    分析:

    -L参数:指明要链接的so库所在路径(如-L. 表示当前路径, -L../so 表示当前路径的上一层目录的so子文件夹中)

    -l参数:指明要连接的库的名字,如-ltest 表示要链接libtest.so库


    三、运行main

    现象:运行出错,报错信息:

    error while loading shared libraries: libaston.so: cannot open shared object file: No such file or directory

    错误原因:在执行main程序的时候发现它动态链接了libtest.so,于是会去固定目录尝试加载libaston.so,如果加载失败则会打印以上错误信息。

    系统加载so库的思路:

    ①首先到LD_LIBRARY_PATH这个环境变量所指定的目录下去寻找

    ①如果找不到,再去/usr/lib, /lib等专门存放库的目录下寻找

    解决方法一:

    将libtest.so放到固定目录下就可以了,这个固定目录一般是/usr/lib目录。(cp libtest.so /usr/lib即可)

    解决方法二:

    使用环境变量LD_LIBRARY_PATH。将libtest.so所在目录导出到LD_LIBRARY_PATH即可。

    如:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/hgfs/winshare/so_test


    补充:ldd命令  

    作用:查看一个可执行程序使用了哪些共享库,并且这些共享库是否能被找到,能被解析。

    如:ldd main,得到:

            linux-gate.so.1 =>  (0xb776f000)
            libtest.so => /usr/lib/libtest.so (0xb7754000)
            libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75a3000)
            /lib/ld-linux.so.2 (0xb7770000)



    展开全文
  • 修复/lib/ld-linux.so.2: bad ELF interpreter: No such ...1、在64系统里执行32位程序如果出现/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory,安装下glic即可 sudo yum install glibc.i686
    修复/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory问题
    1、在64 系统里执行32位程序如果出现/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory,安装下glic即可
    sudo yum install glibc.i686

    2、 如果出现 error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
    sudo yum install zlib.i686 
    展开全文
  • Linux执行文件目录下明明存在*.so文件,但却提示找不到 加载机制的问题 在Linux上,动态库的加载机制和在Windows上完全不一样(其实应该叫做【共享库】才对,动态库是Windows的概念,Windows上为*.dll,Linux上为*...

    Linux可执行文件目录下明明存在*.so文件,但却提示找不到

    加载机制的问题

    在Linux上,动态库的加载机制和在Windows上完全不一样(其实应该叫做【共享库】才对,动态库是Windows的概念,Windows上为*.dll,Linux上为*.so。dll:dynamic link library,即:动态链接库。so:share object(library),即:共享库。)

    1、在Windows上

    一个可执行程序会先在当前目录下找需要的动态库(*.dll)文件,如果当前目录下有,则加载。如果当前目录没有,才会去系统的环境变量目录下去找,如果找到了,则加载,如果连环境变量中都找不到,将报错。

    2、在Linux上

    一个可执行程序会直接去 “环境变量目录下” 找共享库(*.so),如果找不到,则报错。

    “环境变量目录下” 打了引号,因为这更像是一个专门用于【共享库】的环境变量,Linux的环境变量应该是PATH(可在终端输入这个查看:echo $PATH),PATH跟Windows上的环境变量又不一样,PATH描述的是Linux命令的一个路径,而Windows上的环境变量描述的是命令 + 库。Linux的库的加载,由 /etc/ld.so.conf 和 /etc/ld.so.conf.d/*.conf 来进行加载的,不妨一个一个打开看看就一切都明白了。

    3、解决问题(其实如果2中打开看了 /etc/ld.so.conf 和 /etc/ld.so.conf.d/*.conf就已经懂了,无论看没看,想直接解决问题,请看一下操作)

    ①将.so文件路径的目录添加到/etc/ld.so.conf

    sudo vim /etc/ld.so.conf
    

    方法1:在文件末行,添加自己的库的路径。
    方法2:将自己的库,复制到ld.so.conf文件中的其中一个路径下(如:/usr/lib 或 /usr/local/lib。推荐/usr/local/lib,能够避免受到Linux升级的影响)。

    ②让①中的修改生效

    sudo /sbin/ldconfig
    
    展开全文
  • Linux下可执行程序包括可执行程序exe和so, 两者文件都是ELF打头的。 objdump -x libxxxxx.so | grep NEEDED objdump -x 可执行程序名 | grep NEEDED 或 arm-hisiv300-linux-objdump -x 可执行程序 | grep NEEDED...
  • 1. 查看GLIB版本信息 ...~$ strings libGL.so | grep GLIB GLIBC_2.2.5 GLIBC_2.3.2 GLIBC_2.3 GLIBC_2.3.3 GLIBC_2.3.4 GLIBC_2.4 GLIBC_2.14 GLIBC_2.17 2. 查看GCC版本信息 strings xxx | grep GCC ...
  • linux系统——ld-linux.so.X作用

    千次阅读 2019-08-29 15:22:46
    ld-linux.so查找共享库的顺序: Glibc安装的库中有一个为ld-linux.so.X,其中X为一个数字,在不同的平台上名字也会不同。可以用ldd查看: #ldd /bin/cat linux-gate.so.1 => (0x00bfe000) lib...
  • linux动态库so更新

    千次阅读 2019-01-10 16:41:47
    linux更新so库: 不能直接使用cp进行覆盖,源程序直接段错误。 进入/lib文件夹,先删除原来库文件,再放进去新库文件。 执行ldconfig命令,重新加载so库文件。否则不生效。 动态库生成见之前博客...
  • linuxso编写 - 动态库-类

    千次阅读 2019-02-13 18:01:13
    linuxso编写 - 动态库-类 文章目录linuxso编写 - 动态库-类引言代码 引言 加载类有点困难,因为我们需要类的一个实例,而不仅仅是一个函数指针。我们无法通过new来创建类的实例,因为类是在动态库中定义的而...
  • 今天同事问我, 如何判断一个.so是否是debug编译的. 我记得以前自己是用file来查看一个.so, 根据是否包含"not stripped"来判断该.so是否是debug编译的, 于是就没做实验就回答. 然而, stripped/not stripped并不...
  • linux .so文件详解

    万次阅读 2014-03-07 16:36:07
    linux下文件的类型是不依赖于其后缀名的,但一般来讲: .o,是目标文件,相当于windows中的.obj文件 .so 为共享库,是shared object,用于动态连接的,和dll差不多 .a为静态库,是好多个.o合在一起,用于静态连接 .la为...
  • 使用ldd 可以查询一个执行程序的依赖的所有so库 比如ls 命令: # cd /bin/ # ldd ls 2. 根据ldd 查询的到的结果然后拷贝到指定目录 ldd face_server | awk '{print $3}' | xargs -i cp -L {} /home/zhou/tmp/...
  • 命令: strings xxx.so |grep GLIB  strings xxx.so |grep GCC
  • Linuxso库获取当前路径【C/C++】

    千次阅读 2020-04-19 10:13:31
    Linuxso库获取当前路径 之前尝试在so库内调用getpwd()来获取当前路径,但是实际上获取到的是调用so库的可执行程序的所在路径,因此改用dladdr()做一些间接处理来获取。 #include <dlfcn.h> static char* ...
  • 修复/lib/ld-linux.so.2: bad ELF interpreter: No such ...1、在64系统里执行32位程序如果出现/lib/ld-linux.so.2:  bad ELF interpreter: No such file or directory,安装下glic即可   sudo yum install glibc.
  • ld-linux.so.2

    千次阅读 2014-03-14 11:27:52
    /lib/ld-linux.so.2以及它的64位版本/lib64/ld-linux-x86-64.so.2虽然看起来是共享库文件,但实际上他们可以独立运行。他们的功能是负责动态加载。它们通过读取可执行文件的头部信息来确定哪些库文件是必须的,以及...
  • Linux 生成so库文件并调用

    千次阅读 2019-11-05 17:45:46
    为了不暴露源码,将c文件生成so动态库来给别人调用 记录一下方法 首先简单的创建一些测试文件:test.h a.c b.c c.c 如下: test.h #include <stdio.h> void a(); void b(); void c(); a.c #include "test.h...
  • 安装IBM MQ 过程中出现缺少/lib/ld-linux.so.2文件的解决办法 系统版本: MQ 缺少/lib/ld-linux.so.2 解决办法" TITLE="安装ESB MQ 缺少/lib/ld-linux.so.2 解决办法" /> 安装MQ第一步,接收许可(./mqlicense....
  • Linux so库查看工具

    千次阅读 2016-08-18 09:45:50
    反汇编soLinux工具
  • 编译rtmpdump和librtmp之后提示rtmpdump找不到librtmp, 很纳闷,建立软连接不行,把库库拷贝到执行程序的目录也找不到,加环境变量也不行。 解决方法一、把库直接拷贝到/usr/lib/ 下面去,简单暴力。 解决方法二、在...
  • 转载地址:http://bbs.csdn.net/topics/390788452 使用命令: strings *.so |grep GLIB  strings *.so |grep GCC
  • Shared Library是现代操作系统中不可或缺的一部分,但其背后的实现机制却并不容易理解。... 在Linux环境下,这项工作是由ld-linux.so.2来负责完成的,为了支持动态链接机制,还需要深入理解一下GOT和PLT
  • Linux上运行java程序时出现 no libsigar-amd64-linux.so in java.library.path 这个错误时,只需将libsigar-amd64-linux.so,libsigar-x86-linux.so两个文件拷到你的工程下的lib包下,亲测有用。 jar包路径:链接:...
  • linuxso动态库一些不为人知的秘密

    千次阅读 2018-07-04 17:55:35
    linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面知识。 基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看...
  • 因为装的Linux是64位的CentOS。所以在安装32位的mysql的时候出现错误:/lib/ld-linux.so.2: bad ELF interpreter: No ...1、在64系统里执行32位程序如果出现/lib/ld-linux.so.2: bad ELF interpreter: No such file o
  • linuxso动态库调用主程序函数

    千次阅读 2020-08-27 10:06:46
    linux下动态库 今天无意间发现在linux下share object(dynamic library)中的函数竟然可以不通过回调的方式直接访问主程序中的函数,瞬间颠覆以前对于动态库的观念. 1、如代码所示libhi.so中有一个函数hello, 主程序...
  • Linuxso加载原理分析

    千次阅读 2015-11-30 23:46:05
    本文首先回顾了链接器和装入器的基本工作原理及这一技术的发展历史,然后通过实际的例子剖析了Linux系统下动态链接的实现。了解底层关键技术的实现细节对系统分析和设计人员无疑是必须的,尤其当我们在面对实时系统...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 245,399
精华内容 98,159
关键字:

linux执行so

linux 订阅