
(C语言问题)如何使用别人提供的.a接口文件
例如别人提供的lib.a文件中有个函数func();我的test.c中调用了这个func();我想把test.c编译生成.so文件我应该怎么编译这个test.c生成lib...
例如
别人提供的lib.a文件中有个函数func();
我的test.c中调用了这个func();我想把test.c编译生成.so文件
我应该怎么编译这个test.c生成libtest.so。 展开
别人提供的lib.a文件中有个函数func();
我的test.c中调用了这个func();我想把test.c编译生成.so文件
我应该怎么编译这个test.c生成libtest.so。 展开
2个回答
展开全部
for example:(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:都是由C或C++编译出来的)
(-shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件)
(-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。)
(2)动态库的链接
这里有个程序源文件 test.c 与动态库 libtest.so 链接生成执行文件 test:
命令:$ gcc test.c -L. -ltest -o test
(注:测试是否动态连接,如果列出libtest.so,那么应该是连接正常了)
(-L.:表示要连接的库在当前目录中)
(-ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称)
命令:$ ldd test
(注:执行test,可以看到它是如何调用动态库中的函数的。)
这里有一个头文件: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:都是由C或C++编译出来的)
(-shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件)
(-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。)
(2)动态库的链接
这里有个程序源文件 test.c 与动态库 libtest.so 链接生成执行文件 test:
命令:$ gcc test.c -L. -ltest -o test
(注:测试是否动态连接,如果列出libtest.so,那么应该是连接正常了)
(-L.:表示要连接的库在当前目录中)
(-ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称)
命令:$ ldd test
(注:执行test,可以看到它是如何调用动态库中的函数的。)

2024-05-14 广告
广东轻亿云软件科技有限公司在软件开发领域深耕多年,积累了丰富的经验和技术实力。我们深知API接口在现代软件开发中的重要性,因此,我们与多家业界领先的API接口提供商保持着紧密的合作关系,确保我们的产品和服务能够充分利用这些接口,为用户提供更...
点击进入详情页
本回答由广东轻亿云软件提供
2012-09-04
展开全部
我看看那
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |