linux中把.c的文件编译成.so

linux中把.c的文件编译成.so,第1张

就跟用VS编译dll或者lib文件差不多,把代码编译完成以后,命名为相应的后缀就好了。

例如:

gcc

-c

-fPIC

libst.c

生成

libst.o

然后

gcc

-shared

-fPIC

-o

libst.so

libst.o

生成

libst.so

动态链接库

把libst.so拷贝到系统默认库目录下,比如

/lib,

/usr/lib

假定有

test.c

要引用这个库

gcc

-lst

-o

test

test.c

然后就可以了

假如不能把libst.so拷贝到默认库目录下,比方说放在了

/home/aaa/lib

那么就用这样的语句来编译test.c

gcc

-L/home/aaa/lib

-lst

-Wl,-rpath=/home/aaa/lib

-o

test

test.c

假设在linux上用gcc编译程序,需要用下列编译选项生成.so文件:

gcc -fPIC -shared

.so 文件安装一般是在/usr/lib或者/usr/local/lib下,安装后不需要绝对路径即可使用。当然你也可以安装到工程文件夹下面,不过很少有这么做的。使用时只需要dlopen()函数打开这个库,用dlsym()函数将动态库的函数体加载进来;同样已加载的动态函数库可以用dlclose()关闭。

详细使用方法百度搜dlopen 即可。

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

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

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


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存