so文件linux|请问我有一个so文件如何在Linux下编程使用呢

|

1. 请问我有一个.so文件,如何在linux下编程使用呢

-lxx

xx是你的.so文件名

其实使用方法和你使用数学库函数是一样的,源代码中添加

#include <math.h>,编译的时候,加上-lm参数。

注:linux下的.so文件为共享库,相当于windows下的dll文件。

(1)so文件linux扩展阅读:

linux下编写调用so文件实例

.so是Linux(Unix)下的动态链接库. 和.dll类似.

比如:

文件有: a.c, b.c, c.c

gcc -c a.c

gcc -c b.c

gcc -c c.c

gcc -shared libXXX.so a.o b.o c.o

要使用的话也很简单. 比如编译d.c, 使用到libXXX.so中的函数, libXXX.so地址是MYPATHgcc d.c -o d -LMYPATH -lXXX

注意不是-llibXXX

test.c文件和一个test.h,这两个文件要生成libsotest.so文件。然后我还有一个testso.c文件,在这个文件里面调用libsotest.so中的函数。

编写的过程中,首先是编译so文件,我没有编写makefile文件,而是参考的2里面说的直接写的gcc命令。

因为so文件里面没有main函数,所以是不可执行的,所以编译的时候要加上-c,只生成目标文件。

2. linux 怎么编译.so文件

.so是linux用的 所以 要生成so 需要用gcc 和生成可执行文件类似,只是增加一些编译选项 命令如下内 gcc SOURCE_FILES -fPIC -shared -o TARGET SOURCE_FILES可以容是.c文件,也可以是经过-c编译出来的.o文件 TARGET为so文件。

3. 关于Linux中的so文件

你知道windows下的dll文件吗???其实和linux下的so文件是一回事,,so文件也版是编译好了的二进制的权链接库文件,,,一般来说都是c或c++编译出来的,,java的话通常是用的字节码,也就是class文件。。你自己写一个 helloworld的c程序,然后在命令行下用编译器编译gcc -c helloworld.c -o hello.o这样编译出来的结果就是那样的东西了。。这样的文件是不能直接运行的。。

4. linux上.so文件可以直接运行吗

那肯定能被执行啊,看下面图 内核中是把EXEC类型和DYN(就是DYN)都放开执行的

执行是能执行(如/lib64/libc-xx.so),但如果不特殊处理下 一般so执行都会报段错误的, 给你的so加个.interp节指定下连接器地址并指定下入口函数就可以了正常执行了哈

5. linux中,a文件与.so文件有什么关系吗

.a和.so文件都是函数库文件。库是一组预先编译好的函数的集合,库文件的名字以内lib开头,随后的容部分指明这是什么库(例如c代表C语言库,m代表数学库)。.a代表的是静态函数库,当同时运行多个程序并且都使用到同一个函数库的函数时,内存中就会有同一函数的多份副本,会消耗大量宝贵的内存。.so是共享函数库,可以克服.a函数库的不足。当一个程序使用共享函数库时,程序本身不再包含函数代码,而只是引用共享代码,当实际调用时,共享库才被加载到内存中。.a文件类似于Windows下的.lib文件,.so文件类似于Windows下面的.dll文件,这样就好理解了。

6. linux so是什么 文件

.so文件代表Linux的共享函数库文件,程序运行时可能会使用到里面的函数代码。当一个程序需要.so共享函数库文件时,系统自动会把它加载到内存中使用。相当于Windows系统里面的dll动态链接库文件。

7. linux的C编程,怎么使用so文件

linux下的.so文件为共享库,相当于windows下的dll文件,使用方法如下:在你的工程源代码里包含.h头文件,然后可以调用动态库里的函数,在链接的时候加上如下编译器参数:-l xx.so如果你的so文件是以lib开头的,还可以直接这样使用:-lxxxx是你的.so文件名其实使用方法和你使用数学库函数是一样的,源代码中添加 #include <math.h>,编译的时候,加上-lm参数。

8. linux so文件的全称是什么

so 为共享库,是shared object,用于动态连接的,和dll差不多

9. so格式文件是什么文件

SO文件格式即ELF文件格式,它是Linux下可执行文件,共享库文件和目标文件的统一格式。

根据看待文件的不同方式,ELF文件可以分为链接视图和装载视图。链接视图是链接器从链接的角度看待静态的ELF文件。

从链接视图看ELF文件,ELF文件由多个section组成,不同的section拥有不同的名称,权限。而装载视图是操作系统从加载ELF文件到内存的角度看待动态的ELF文件。

从装载视图看ELF文件,ELF文件由多个segment,每一个segment都拥有不同的权限,名称。实际上,一个segment是对多个具有相同权限的section的集合。

(9)so文件linux扩展阅读:

由于Android操作系统的底层基于Linux系统,所以SO文件可以运行在Android平台上。Android系统也同样开放了C/C++接口供开发者开发Native程序。

由于基于虚拟机的编程语言JAVA更容易被人反编译,因此越来越多的应用将其中的核心代码以C/C++为编程语言,并且以SO文件的形式供上层JAVA代码调用,以保证安全性。

而ELF头表记录了ELF文件的基本信息,包括魔数,目标文件类型(可执行文件,共享库文件或者目标文件),文件的目标体系结构,程序入口地址(共享库文件为此值为0),然后是section表大小和数目,程序头表的大小和数目,分别对应的是链接视图和装载视图。

10. 什么是SO文件

SO文件是Linux下共享库文件,它的文件格式被称为ELF文件格式。由于Android操作系统的底层基于Linux系统,所以SO文件可以运行在Android平台上。

Android系统也同样开放了C/C++接口供开发者开发Native程序。由于基于虚拟机的编程语言JAVA更容易被人反编译,因此越来越多的应用将其中的核心代码以C/C++为编程语言,并且以SO文件的形式供上层JAVA代码调用,以保证安全性。

(10)so文件linux扩展阅读:

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(软件编程)


赞 (0)