
我在库中有函数foo,它需要来自另一个库libbar.so的函数.
在我使用函数foo的主程序中,我必须用-lbar标志编译它.有没有办法可以静态编译我的库,所以它包含了其他库中的所有必需代码,我可以编译我的结束程序而不需要-lbar标志?
解决方法 共享对象(.so)不是库,它们是对象.您无法提取部分内容并将其插入其他库中.如果构建引用另一个的共享对象,您可以做什么 – 但在运行时需要另一个.只需在链接libfoo时添加-lbar即可.
如果你能够构建libbar,你显然可以创建一个libfoo和libbar组合的库. IIRC,你也可以通过链接.a和.o意图进入libbar,使链接器构建一个libfoo库和libbar所需的部分.例:
gcc -fPIC -c lib1.c # define foofn(),reference barfn1()gcc -fPIC -c lib2a.c # define barfn1(),reference barfn2()gcc -fPIC -c lib2b.c # define barfn2()gcc -fPIC -c lib2c.c # define barfn3()gcc -c main.c # reference foofn()ar -cru libbar.a lib2*.ogcc -shared -o libfoo.so lib1.o -L. -lbarnm libfoo.so | grep barfn2() # ok,not heregcc -o prog main.o -L. -lfooenv LD_liBRARY_PATH=. ./prog # works,so foofn(),barfn1() and barfn2() are found总结
以上是内存溢出为你收集整理的c – 静态编译共享库全部内容,希望文章能够帮你解决c – 静态编译共享库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)