linux下*.so库没有入口点?那他的运作原理是?跪求大神指导!!

linux下*.so库没有入口点?那他的运作原理是?跪求大神指导!!,第1张

linux下的so文件动态库文件,也叫共享库,是不能直接运行的;里面都是一些公用的函数定义,被其它应用程序调用。

例如:

现有两个文件:test.c、so_test.h;test.c里面定义了一个公共函数str_cpy()

我们将这两个文件编译成一个动态库:libtest.so。

命令:

$ gcc test.c -fPIC -shared -o libtest.so

有个程序源文件 main.c, 想调用str_cpy()函数.

编译时需要将main.c与动态库 libtest.so 链接生成执行文件main:

命令:$ gcc main.c -L. -ltest -o main

so文件不可以直接运行的,so文件是动态函数库文件,函数库文件(包括.a文件和.so文件)只能用来被调用运行,不能直接运行的,so文件就相当于Windows下的dll文件,dll文件就是不能直接运行的。

.so是二进制格式的链接库文件,包含链接库源文件(.c)中的各函数实现、调试信息等。

.out一般也是由gcc编译生成的二进制格式文件,但有可能是执行程序也可能是链接库文件,因为在linux中扩展名除了一些特殊的约定,一般情况下是无意义的。

执行文件也分动态链接还是静态链接。大多数情况都是动态链接,里面存放源文件(.c)中编译后的二进制代码及所调用函数库的入口参数,静态链接则是all-in-one,就是将所用到的非标准库都打包到执行文件中,所以体积都较大。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7191553.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存