【问题标题】:How to create one static library from several others static libraries in C on Linux? [duplicate]如何在 Linux 上的 C 语言中从其他几个静态库创建一个静态库? [复制]
【发布时间】:2019-12-30 07:44:01
【问题描述】:

例如, 我们有以下三个库:

1.1.......................lib_A.a

1.2.......................lib_B.a

1.3.......................lib_C.a

现在我想创建一个包含上述所有静态库的库。

我使用了以下命令:

ar -crs lib_Z.a lib_A.a lib_B.a lib_C.a

当我使用lib_Z.a 创建最终可执行文件时,编译器给了我以下错误:

添加符号时出错:存档没有索引;运行ranlib添加一个

如何解决这个问题?

【问题讨论】:

    标签: linker static-linking unix-ar


    【解决方案1】:

    您的lib_Z.a 不包含目标文件;它只包含其他.a 文件,加载程序不知道如何处理它。运行ranlib 无济于事;它不会在lib_Z.a 存档中找到任何目标文件。您必须从单独的库中提取目标文件,然后将它们全部构建到结果中:

    mkdir Work
    cd Work
    ar -x ../lib_A.a
    ar -x ../lib_B.a
    ar -x ../lib_C.a
    ar -crs ../lib_Z.a *.o
    cd ..
    rm -fr Work
    

    您可能会遇到的唯一麻烦是如果两个库包含相同的目标文件名(例如,lib_A.a 包含 config.olib_B.a 也是如此,但它们定义了不同的配置)。您必须重命名一个(或两个)目标文件:

    …
    ar -x ../lib_A.a
    mv config.o A_config.o
    ar -x ../lib_B.a
    mv config.o B_config.o
    …
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-17
      • 2021-02-26
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-02
      相关资源
      最近更新 更多