精华内容
下载资源
问答
  • 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
    
    展开全文
  • 命令: strings xxx.so |grep GLIB  strings xxx.so |grep GCC

    命令:

    strings xxx.so |grep GLIB 

    strings xxx.so |grep GCC

    展开全文
  • 转载地址:http://bbs.csdn.net/topics/390788452 使用命令: strings *.so |grep GLIB  strings *.so |grep GCC

    转载地址:http://bbs.csdn.net/topics/390788452

    使用命令:

    strings *.so |grep GLIB 

    strings *.so |grep GCC
    展开全文
  • 每个文件经过编译都会形成一个目标文件(二进制文件),多个目标文件链接后才能形成可执行文件。 o文件如何形成: gcc -c a.c 可执行文件: 不论是c文件还是o文件,都是无法执行的,最终还要生成

    linux下c语言工程:

    c文件:主要每个模块的原代码都在c文件中。

    h文件:每个c文件都跟着一个h文件,h文件的作用是放着c文件中函数的声明,结构体的定义,宏的定义等。

    o文件:目标文件。每个文件经过编译都会形成一个目标文件(二进制文件),多个目标文件链接后才能形成可执行文件。

    o文件如何形成: gcc -c a.c

    可执行文件:

    不论是c文件还是o文件,都是无法执行的,最终还要生成可执行的文件。

    gcc  a.c b.c c.c -o run  将c文件编译后链接,生成可执行文件

    gcc a.o b.o c.o -o run   将目标文件链接为可执行文件


    a文件:将o文件打包生成的静态库。


    so文件:形成动态库,当程序运行的时候才加载进来。

    生成so文件:gcc a.c b.c c.c -fpic  -shared -o  librun.so

    .o文件

    .o文件是源码编译出的二进制文件。
    你先得了解从源代码到可执行文件的过程。以一个简单的add函数源文件为例。

    int add(int a,int b)
    {
        return a+b;
    }

    先预处理为.i文件
    gcc -E add.c -o add.i
    再编译为汇编文件
    gcc -S add.i -o add.s
    再汇编为二进制的.o文件
    gcc -c add.s -o add.o

    好,现在.o文件出来了。它就是C/C++编译的产物,因为C/C++编译的单元编译。每一个.c/.cpp文件就是一个编译单元,把所有单元都编译好之后,再连接成一个完成的程序。

    .a文件

    .a文件实质上就是.o文件打了个包。一般把它叫做静态库文件。它在使用的时候,效果和使用.o文件是一样的。

    .so文件

    .so文件就不一样了,它不是简单的.o文件打了一个包,它是一个ELF格式的文件,也就是linux的可执行文件。
    .so文件可以用于多个进程的共享使用(位置无关的才行),所以又叫共享库文件。程序在使用它的时候,会在运行时把它映射到自己进程空间的某一处,其不在使用它的程序中。


    展开全文
  • 今天同事问我,如何判断一个.so是否是debug编译的。 我记得以前自己是用file来查看一个.so,根据是否包含”not stripped”来判断该.so是否是debug编译的,于是...根据所言, debug/release的区别更多的表现在.so可执行
  • 以下是.so库的生成及编译步骤: 如果.cpp文件不多的话,可以将.cpp和.hpp文件都放在一个目录下,依次输入名称进行编译.也可以用指令将整个目录下的.cpp文件全部编译.这里先记录下依次输入名称的方法. 1.对目录下不包含...
  • Linux elf可执行文件加密

    千次阅读 2020-04-21 17:58:51
    ELF 全称 “Executable and Linkable Format”,即可执行可链接文件格式,目前常见的Linux、 Android可执行文件、共享库(.so)、目标文件( .o)以及Core 文件(吐核)均为此格式。 那么如何对elf文件进行加密呢?...
  •  2、可执行文件,例如/bin/bash; 3、共享目标文件,例如/lib/libc.so。 在Linux 可重定位文件 ELF结构一文中,我们已经分析了可重定位文件ELF结构。本文分析可执行文件的ELF结构。 首先附上源代码:#include ...
  • Linux查看可执行文件依赖库

    千次阅读 2020-04-15 10:15:04
    Linux查看文件依赖库使用 ldd 命令查看依赖库曲线方式查看可执行文件依赖情况使用交叉编译工具链查看依赖情况 使用 ldd 命令查看依赖库 在Linux系统中,一般使用ldd指令查看某个可执行文件所依赖的动态库,命令如下 ...
  • Linux生成可执行文件

    千次阅读 2019-01-06 21:58:51
    linux下c语言工程: c文件:主要每个模块的原代码都在c文件中。 h文件:每个c文件都跟着一个h文件,h文件的作用是放着...每个文件经过编译都会形成一个目标文件(二进制文件),多个目标文件链接后才能形成可执行...
  • Linux_无法运行可执行文件

    千次阅读 2017-05-23 16:44:18
    但是,当此软件程序的.pro中包含了NS3中的一些.so文件时,只能通过Qt来运行他,无法双击其可执行文件运行。 解决方法:运行不了是因为找不到相关的libns3.19-core-debug.so(或libns3.25-core-debug.so)文件,我们...
  • linux 可执行文件创建 学习笔记

    千次阅读 2015-04-12 11:56:15
    编译链接 ELF 可执行文件格式 sys_execve
  • 今天同事问我, 如何判断一个.so是否是debug编译的. 我记得以前自己是用file来查看一个.so, 根据是否包含"not stripped"来判断该.so是否是debug编译的, 于是就没做实验就回答. 然而, stripped/not stripped并不...
  • linux可执行文件找不到共享库

    千次阅读 2017-10-20 11:55:59
    今天在执行一个ffmpeg程序时,提示:ffmpeg: error while loading shared libraries: libx264.so.152: cannot open shared object file: No such file or directorygoogle了一下,是由于找不到lib这个文件。...
  • linux可执行文件创建过程 浅析

    千次阅读 2015-04-19 11:30:06
    linux elf 动态库
  • 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/...
  • 今天小编就为大家分享一篇关于linux下查看so可执行程序的依赖库,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 目标文件是源代码经过编译但未进行链接的那些中间文件,在linux中的.o文件,它跟可执行文件的内容结构很相似,所以一般可执行格式采用一种方式存储,在linux下,我们可以将他们统称ELF文件。ELF文件标准里面把...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 154,653
精华内容 61,861
关键字:

linux可执行文件与so

linux 订阅