1

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

  • 字符串-memcpy.o
  • 机器-memcpy.o

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

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

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

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

4

1 回答 1

0

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

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

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

于 2013-04-05T19:01:34.637 回答