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

linux中把.c的文件编译成.so的文件?例如Ubuntu中桌面有一个文件libst.c,怎么把它编译成libst.so的文件呢?... linux中把.c的文件编译成.so的文件?例如Ubuntu中桌面有一个文件libst.c ,怎么把它编译成libst.so的文件呢? 展开
 我来答
出家人词悲
高赞答主

2016-01-20 · 大脑停止不了思考
知道大有可为答主
回答量:1.4万
采纳率:12%
帮助的人:3929万
展开全部
就跟用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
kwydwuf
推荐于2018-02-28 · TA获得超过7410个赞
知道大有可为答主
回答量:1527
采纳率:71%
帮助的人:2006万
展开全部
首先
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
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
就烦条0o
2016-01-21 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46492
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
linux中共享库以so为后缀(shared object),与Windows下的DLL类似,是在程序运行时动态连接。多个进程可以连接同一个共享库。
以下以编译mylib.c为例讲如何编译.so文件。

首先,编译mylib.c:

$gcc -c -fPIC -o mylib.o mylib.c

-c表示只编译(compile),而不连接。-o选项用于说明输出(output)文件名。gcc将生成一个目标(object)文件mylib.o。

注意-fPIC选项。PIC指Position Independent Code。共享库要求有此选项,以便实现动态连接(dynamic linking)。

生成共享库:

$gcc -shared -o mylib.so mylib.o

库文件以lib开始。共享库文件以.so为后缀。-shared表示生成一个共享库。

这样,共享库就完成了。.so文件和.h文件都位于当前工作路径(.)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式