C 是否可以使用不同的导出API和相同的对象名成功链接静态linux库?
我有两个linux静态库 它们是完全独立编译的,具有不同的名称,它们发布的API是不同的,但是构建它们的C文件使用相同的名称,因此组成库的对象文件具有相同的名称C 是否可以使用不同的导出API和相同的对象名成功链接静态linux库?,c,linux,linker,C,Linux,Linker,我有两个linux静态库 它们是完全独立编译的,具有不同的名称,它们发布的API是不同的,但是构建它们的C文件使用相同的名称,因此组成库的对象文件具有相同的名称 当我与这些库进行链接时,是否会因为对象名称相同而出现链接问题,即使函数名称是唯一的?.o(对象)文件的名称是不相关的。只要它们不使用重复的名称定义外部函数/对象(在对象的C意义上,而不是“对象文件”意义上),就可以了。具有相同文件名的静态库没有问题-您可以使用绝对文件路径链接它们以避免歧义。只要它们没有任何通用符号名称(即,任何导出的函
当我与这些库进行链接时,是否会因为对象名称相同而出现链接问题,即使函数名称是唯一的?
.o
(对象)文件的名称是不相关的。只要它们不使用重复的名称定义外部函数/对象(在对象的C意义上,而不是“对象文件”意义上),就可以了。具有相同文件名的静态库没有问题-您可以使用绝对文件路径链接它们以避免歧义。只要它们没有任何通用符号名称(即,任何导出的函数或具有相同名称的变量),就可以了
也就是说,拥有两个同名的库会导致混乱和未来的灾难,更不用说,如果您决定动态链接这些库,会使事情变得复杂
如果我是你,我会在项目管理层研究解决命名冲突的可能解决方案。如果您确信它们都是具有相同名称的静态库,那么您可以重命名其中一个,并将它们链接到您的程序中。这些库具有不同的名称-只是它们生成的文件中至少有一些具有相同的名称。正如您所说,这两个库中的函数名是唯一的,这意味着在将它们链接到您的程序时没有冲突,否则编译器将向您发出警告或错误。库名是不同的,只有编译它们的C文件的名称是共享的。@BlankXavier:这也不是问题。常见的符号名称会引起冲突…谢谢!(胡说八道)(任何阻碍人们说谢谢的编辑改进都是有害的)。