在共享对象中包含静态库?

问题描述:

我想将一堆静态库编译成一个共享对象。到目前为止,我有在共享对象中包含静态库?

g++ -Wl -shared -fPIC -o myshared.so objs/*.o 

凡OBJ文件/ *。上述Ø包含了所有使用AR的各种静态库中提取的目标文件。

更新:基本上,我想知道如果我可以直接在命令行上使用.a文件而不必提取它们。

+0

我真的不想用PIC代码(PIC =位置独立代码)混合非PIC代码(这是静态库中常见的味道)。你会遇到很多麻烦。 – 2012-03-16 17:41:40

这确实是一个两个步骤:

ar -x mylib.a 
gcc -shared *.o -o mylib.so 
+0

好的,我希望g ++可以一次做到这一切。 – chriskirk 2012-03-16 17:40:06

+0

其实你可以:' - wl, - 整个档案,foo.a, - 没有整个档案'(不知道我的选项名称是否正确)。我第二次是@Basil对非PIC代码的评论。 – ams 2012-03-18 00:03:21

不能使用gcc -shared -o foo.so foo.a的原因是因为档案从档案对象文件是处理不同的是只用来处理未定义的符号 - 其中有没有,因为你之前没有指定.o文件。