【问题标题】: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.solibrun.so?

在 Windows 上是这样完成的,但在 Linux 上如何?

  1. dumpbin /exports run.dll
  2. 使用导出函数制作 run.def
  3. 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 相同)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 2018-03-26
      • 2019-05-26
      相关资源
      最近更新 更多