如何从共享生成静态库(.a)以进行动态链接

How generate static library (.a) from shared for dynamic linking

我有一个没有源代码的共享库 librun.so,但有一个 SDK 可以使用它。

如何生成静态库(librun.a),仅使用 librun.so 的导出函数来动态链接我的图书馆 libapp.solibrun.so?

在 windows 上是这样完成的,但是在 Linux 上是怎么做的?

  1. dumpbin /exports run.dll
  2. Make run.def with export functions
  3. lib /def:run.def /out:run.lib /machine:x86

在 Linux 上,您通常不需要显式静态库,只需 link 直接针对共享库:

$ 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).