如何创建具有两个具有相同名称的函数的共享库(.so)

时间:2013-04-05 18:18:25

标签: shared-libraries libc newlib

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

  • 绳memcpy.o
  • 机器memcpy.o

他们都定义了一个函数memcpy()。现在,我想用:

创建一个共享库(.so)
gcc -shared -o test.so string-memcpy.o machine-memcpy.o

由于memcpy的多重定义,此操作失败。有没有办法做到这一点 ?谢谢!

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

1 个答案:

答案 0 :(得分:0)

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

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

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