【发布时间】:2012-02-07 04:25:32
【问题描述】:
我有一堆静态库 (*.a),我想构建一个共享库 (*.so) 来链接这些静态库 (*.a)。如何在 gcc/g++ 中这样做?
【问题讨论】:
-
.a 不是共享库。你能举个例子说明你正在尝试做什么吗?
标签: c++ c gcc shared-libraries static-libraries
我有一堆静态库 (*.a),我想构建一个共享库 (*.so) 来链接这些静态库 (*.a)。如何在 gcc/g++ 中这样做?
【问题讨论】:
标签: c++ c gcc shared-libraries static-libraries
您可以(只需提取所有.o 文件并将它们与-shared 链接以制作.so),但它是否有效,以及它的效果如何,取决于平台以及静态库是否编译为与位置无关的代码 (PIC)。在某些平台上(例如 x86_64),非 PIC 代码在共享库中无效并且无法工作(实际上我认为链接器会拒绝生成 .so)。在其他平台上,非 PIC 代码可以在共享库中工作,但该库的内存副本不能在使用它的不同程序甚至同一程序的不同实例之间共享,因此会导致巨大的内存膨胀。
【讨论】:
我不明白为什么您不能将动态库的文件构建为 .o 文件并与之链接;
gcc -shared *.o -lstaticlib1 -lstaticlib2 -o mylib.so
【讨论】:
*.o,如果你没有它们
.o