c – 静态编译共享库

前端之家收集整理的这篇文章主要介绍了c – 静态编译共享库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有一些自制函数的共享库,我将其编译到我的其他程序中,但是我必须将结束程序与我用来编译静态库的所有库相关联.这是一个例子:

我在库中有函数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*.o
gcc -shared -o libfoo.so lib1.o -L. -lbar
nm libfoo.so | grep barfn2()    # ok,not here
gcc -o prog main.o -L. -lfoo
env LD_LIBRARY_PATH=. ./prog    # works,so foofn(),barfn1() and barfn2() are found

猜你在找的C&C++相关文章