【问题标题】:how to make shared library from a static library under ubuntu using gcc如何使用 gcc 从 ubuntu 下的静态库制作共享库
【发布时间】:2011-02-08 05:55:03
【问题描述】:

我有一个静态库 libsrp.a,我想从中创建一个包含所有符号的共享库 libsrp.so。请告诉我如何在ubuntu下制作.so。

谢谢

【问题讨论】:

标签: ubuntu shared-libraries


【解决方案1】:

使用标志重新编译包含在 libsrp.a 中的目标文件以创建与位置无关的代码 (fpic),如

gcc -fpic -c foo.c
gcc -fpic -c bar.c

现在您可以将 foo.o 和 bar.o 组合成一个共享库,就像在

中一样
gcc -shared -o libshared.so foo.o bar.o

【讨论】:

    【解决方案2】:

    使用--whole-archive 标志:

    gcc -shared -o libsrp.so -Wl,--whole-archive -lsrp -Wl,--no-whole-archive
    

    来自ld man page(我的重点):

    --整个存档 对于命令行中在 --whole-archive 选项之后提到的每个存档,在链接中包含存档中的每个目标文件,而不是在存档中搜索所需的目标文件。 这通常用于将存档文件转换为共享库,强制将每个对象包含在生成的共享库中。此选项可以多次使用。

    【讨论】:

    • 如果原.a文件中包含不使用fPIC编译的目标文件,那么新生成的对应.so文件能否正常工作?
    • @solotim - 我已经成功地能够在 32 位 Linux 上的共享对象中使用非 PIC 代码 - 尽管看起来 64 位 Linux 可能并非如此。
    猜你喜欢
    • 2012-10-25
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2020-02-01
    • 2017-12-27
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多