【问题标题】:How to create a shared library (.so) having two functions with the same name如何创建具有两个同名函数的共享库 (.so)
【发布时间】:2013-04-05 18:18:25
【问题描述】:

我首先编译了两个目标文件(.o):

  • 字符串-memcpy.o
  • machine-memcpy.o

它们都定义了一个函数memcpy()。现在,我想创建一个共享库(.so):

gcc -shared -o test.so string-memcpy.o machine-memcpy.o

由于memcpy 的多个定义”而失败。有没有办法做到这一点 ?谢谢!

事实上,我在尝试为 libc (newlib-1.16) 编译共享库时遇到了这个问题。我只能在 Internet 上找到如何从中构建静态库。因此,任何有关如何实现这一目标的提示都值得赞赏。

【问题讨论】:

  • 我注意到我可以毫无问题地使用“ar rc ../libc.a *.o”创建静态库。那么区别是什么呢?构建 glibc 共享库是否存在类似问题? (我不熟悉 glibc)。谢谢!

标签: shared-libraries libc newlib


【解决方案1】:

静态库只是一个包含 .o 文件的“.ar”文件(tar 的原始前身)。该过程中涉及的任何人都不知道或关心是否存在符号冲突。如果 .ar 文件中的多个 .o 文件包含相同的符号,链接器将选择它看到的第一个。如果它稍后尝试使用另一个 .o 文件来满足另一个符号,你会得到一个错误。

另一方面,共享库是链接器输出,链接器不愿意创建具有重复符号名称的文件。

ld 有一些复杂的选项可以让你解决这个问题,但它们也可能只会让你的问题变得更糟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 2016-01-13
    • 2013-04-06
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多