【问题标题】:Include static lib in shared object?在共享对象中包含静态库?
【发布时间】:2012-03-16 17:35:02
【问题描述】:

我想将一堆静态库编译成一个共享对象。到目前为止我有

g++ -Wl -shared -fPIC -o myshared.so objs/*.o

上面的 objs/*.o 包含使用 ar 从各种静态库中提取的所有目标文件。

更新:基本上,我想知道是否可以直接在命令行上使用 .a 文件而无需解压它们。

【问题讨论】:

  • 我真的会避免将非 PIC 代码(这是静态库中的常见风格)与 PIC 代码(PIC = 位置无关代码)混合。你会遇到很多麻烦。

标签: linux gcc g++ unix-ar object-files


【解决方案1】:

这确实是一个两步过程:

ar -x mylib.a
gcc -shared *.o -o mylib.so

【讨论】:

  • 好的,我希望 g++ 可以一次完成。
  • 实际上你可以:-Wl,--whole-archive,foo.a,--no-whole-archive(不确定我的选项名称是否正确)。不过,我赞同@Basil 关于非 PIC 代码的说法。
【解决方案2】:

您不能使用 gcc -shared -o foo.so foo.a 的原因是因为归档的处理方式不同,因为归档中的目标文件仅用于解析未定义的符号,因为您没有指定先前的 .o 文件,所以没有符号。

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多