【问题标题】:create .so by linking to combination of other .so and .a files通过链接到其他 .so 和 .a 文件的组合来创建 .so
【发布时间】:2015-02-12 13:22:45
【问题描述】:

我需要通过将 .so 链接到其他开源库(一些以 .so 和一些以 .a 的形式提供)来创建一个 .so

是否可以通过将 .so 和 .a 的组合链接来创建 .so

例如假设我正在尝试通过将其与 liba.solibb.a 链接来创建 libfinal.so

gcc -shared -Wl,-soname,libfinal.so -Wl,--no-undefined -la -lb

上述命令正在尝试查找不可用的 libb.so。有什么解决办法吗?

更新:问题似乎是 libb.a 是用 out -fPIC 选项编译的。 错误 --> 创建共享对象时无法使用针对“libipt_DNAT_init”的重定位 R_MIPS_26;用 -fPIC 重新编译

【问题讨论】:

  • IIRC 目标文件(及其档案)必须在没有选项的情况下列出。即尝试:gcc -shared -Wl,-soname,libfinal.so -Wl,--no-undefined -la b
  • 显式使用完整路径和文件名?
  • 添加完整路径会导致以下错误。 --> 无法读取符号:错误值
  • @AnupPatil 我上面的修改呢?
  • 加上-L.,编译行或多或少是正确的。如果链接器无法读取libb,则很可能 libb 已损坏或针对不同平台编译。

标签: c linux gcc shared-libraries


【解决方案1】:


下面是链接目标文件、档案和库的命令语法。

gcc -o <output file> -l<library> objectfiles|archives

例如。链接libc.so.6、Ex.o和binary1.a生成MyEx.so

gcc -o MyEx.so -lc Ex.o binary1.a

注意:存档 (.a) 只不过是一个包含其他文件集合的单个文件

【讨论】:

    猜你喜欢
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多