linux .so,linux nm命令
本篇文章给大家谈谈linux .so,以及linux nm命令对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
linux中,a文件与.so文件有什么关系吗
.a和.so文件都是函数库文件。库是一组预先编译好的函数的集合,库文件的名字以lib开头,随后的部分指明这是什么库(例如c代表C语言库,m代表数学库)。
.a代表的是静态函数库,当同时运行多个程序并且都使用到同一个函数库的函数时,内存中就会有同一函数的多份副本,会消耗大量宝贵的内存。
.so是共享函数库,可以克服.a函数库的不足。当一个程序使用共享函数库时,程序本身不再包含函数代码,而只是引用共享代码,当实际调用时,共享库才被加载到内存中。
.a文件类似于Windows下的.lib文件,.so文件类似于Windows下面的.dll文件,这样就好理解了。
linux中.so后缀的文件怎么使用
在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library)。这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性。同样,LINUX的也具备类似的动态链接库,而且为数不少。在/lib目录下,就有许多以.so作后缀的文件,这就是LINUX系统应用的动态链接库,只不过与WINDOWS叫法不同,它叫so,即Shared Object,共享对象。(在LINUX下,静态函数库是以.a作后缀的) X-WINDOW作为LINUX下的标准图形窗口界面,它本身就采用了很多的动态链接库(在/usr/X11R6/lib目录下),以方便程序间的共享,节省占用空间。flash只是一个插件,在windows中就是一个ocx的链接库方式(和dll略有不同),因此linux中一旦你了一个共享函数库,你还需要安装它。其实简单的方法就是拷贝 \x0d\x0a你的库文件到指定的标准的目录(例如/usr/lib),然后运行ldconfig。 \x0d\x0a如果你没有权限去做这件事情,例如你不能修改/usr/lib目录,那么 \x0d\x0a你就只好通过修改你的环境变量来实现这些函数库的使用了。首先, \x0d\x0a你需要创建这些共享函数库;然后,设置一些必须得符号链接,特别 \x0d\x0a是从soname到真正的函数库文件的符号链接,简单的方法就是运行ldconfig: \x0d\x0aldconfig-n directory_with_shared_libraries \x0d\x0a然后你就可以设置你的LD_LIBRARY_PATH这个环境变量,它是一个以逗号 \x0d\x0a分隔的路径的集合,这个可以用来指明共享函数库的搜索路径。例如 \x0d\x0a,使用bash,就可以这样来 \x0d\x0a启动一个程序my_program: \x0d\x0aLD_LIBRARY_PATH=.LD_LIBRARY_PATH my_program
linux下面的so是什么东西
SO文件是Linux下共享库文件,它的文件格式被称为ELF文件格式。由于Android操作系统的底层基于Linux系统,所以SO文件可以运行在Android平台上。
Android系统也同样开放了C/C++接口供开发者开发Native程序。由于基于虚拟机的编程语言JAVA更容易被人反编译,因此越来越多的应用将其中的核心代码以C/C++为编程语言,并且以SO文件的形式供上层JAVA代码调用,以保证安全性。
扩展资料:
so文件使用方法:
(1)动态库的编译。这里有一个头文件:so_test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。
命令:$ gcc test_a.c test_b.c test_c.c-fPIC-shared-o libtest.so不用该标志外部程序无法连接。相当于一个可执行文件。
(2)动态库的链接这里有个程序源文件 test.c与动态库 libtest.so链接生成执行文件 test:命令:$ gcc test.c-L.-ltest-o test命令:$ ldd test执行test,可以看到它是如何调用动态库中的函数的。
参考资料来源:百度百科—SO(软件编程)