如何从共享生成静态库(.a)以进行动态链接
How generate static library (.a) from shared for dynamic linking
我有一个没有源代码的共享库 librun.so,但有一个 SDK 可以使用它。
如何生成静态库(librun.a),仅使用 librun.so 的导出函数来动态链接我的图书馆 libapp.so 与 librun.so?
在 windows 上是这样完成的,但是在 Linux 上是怎么做的?
- dumpbin /exports run.dll
- Make run.def with export functions
- 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).
我有一个没有源代码的共享库 librun.so,但有一个 SDK 可以使用它。
如何生成静态库(librun.a),仅使用 librun.so 的导出函数来动态链接我的图书馆 libapp.so 与 librun.so?
在 windows 上是这样完成的,但是在 Linux 上是怎么做的?
- dumpbin /exports run.dll
- Make run.def with export functions
- 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).