【问题标题】:How generate static library (.a) from shared for dynamic linking如何从共享中生成静态库 (.a) 以进行动态链接
【发布时间】:2021-02-11 08:13:46
【问题描述】:
我有一个共享库 librun.so 没有源代码,但有一个 SDK 可以使用它。
如何生成静态库 (librun.a),只使用 librun.so 中的导出函数来动态链接我的库 libapp.so 与librun.so?
在 Windows 上是这样完成的,但在 Linux 上如何?
- dumpbin /exports run.dll
- 使用导出函数制作 run.def
- lib /def:run.def /out:run.lib /machine:x86
【问题讨论】:
标签:
shared-libraries
static-libraries
static-linking
dynamic-linking
【解决方案1】:
在 Linux 上,您通常不需要显式静态库,只需直接链接到共享库:
$ gcc ... -o libapp.so -Lpath/to/librun.so -lrun
如果确实需要静态库,可以通过Implib.so生成:
# Generate wrappers
$ implib-gen.py librun.so
Generating librun.so.tramp.S...
Generating librun.so.init.c...
# Create static library
$ gcc -c -fPIC librun.so.tramp.S librun.so.init.c
$ ar rcs librun.a librun.so.*.o
请注意,生成的静态库 librun.a 将是一个 包装器,它在内部加载原始 librun.so 并将调用转发给它(这与 Windows 相同)。