Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是否可以使用不同的导出API和相同的对象名成功链接静态linux库?_C_Linux_Linker - Fatal编程技术网

C 是否可以使用不同的导出API和相同的对象名成功链接静态linux库?

C 是否可以使用不同的导出API和相同的对象名成功链接静态linux库?,c,linux,linker,C,Linux,Linker,我有两个linux静态库 它们是完全独立编译的,具有不同的名称,它们发布的API是不同的,但是构建它们的C文件使用相同的名称,因此组成库的对象文件具有相同的名称 当我与这些库进行链接时,是否会因为对象名称相同而出现链接问题,即使函数名称是唯一的?.o(对象)文件的名称是不相关的。只要它们不使用重复的名称定义外部函数/对象(在对象的C意义上,而不是“对象文件”意义上),就可以了。具有相同文件名的静态库没有问题-您可以使用绝对文件路径链接它们以避免歧义。只要它们没有任何通用符号名称(即,任何导出的函

我有两个linux静态库

它们是完全独立编译的,具有不同的名称,它们发布的API是不同的,但是构建它们的C文件使用相同的名称,因此组成库的对象文件具有相同的名称


当我与这些库进行链接时,是否会因为对象名称相同而出现链接问题,即使函数名称是唯一的?

.o
(对象)文件的名称是不相关的。只要它们不使用重复的名称定义外部函数/对象(在对象的C意义上,而不是“对象文件”意义上),就可以了。

具有相同文件名的静态库没有问题-您可以使用绝对文件路径链接它们以避免歧义。只要它们没有任何通用符号名称(即,任何导出的函数或具有相同名称的变量),就可以了

也就是说,拥有两个同名的库会导致混乱和未来的灾难,更不用说,如果您决定动态链接这些库,会使事情变得复杂


如果我是你,我会在项目管理层研究解决命名冲突的可能解决方案。如果您确信它们都是具有相同名称的静态库,那么您可以重命名其中一个,并将它们链接到您的程序中。这些库具有不同的名称-只是它们生成的文件中至少有一些具有相同的名称。正如您所说,这两个库中的函数名是唯一的,这意味着在将它们链接到您的程序时没有冲突,否则编译器将向您发出警告或错误。库名是不同的,只有编译它们的C文件的名称是共享的。@BlankXavier:这也不是问题。常见的符号名称会引起冲突…谢谢!(胡说八道)(任何阻碍人们说谢谢的编辑改进都是有害的)。