据我所知,该ELF格式没有指定哪些符号来自哪个文件 - 每个ELF使用 import 的都有一个要导入的符号列表和文件名列表,并且加载程序试图在文件名中定位这些符号。
但是如果发生碰撞会发生什么 - 相同的符号在不同的文件中出现两次?是否有可能以某种方式强制ELF目标文件的格式查找特定符号?
据我所知,该ELF格式没有指定哪些符号来自哪个文件 - 每个ELF使用 import 的都有一个要导入的符号列表和文件名列表,并且加载程序试图在文件名中定位这些符号。
但是如果发生碰撞会发生什么 - 相同的符号在不同的文件中出现两次?是否有可能以某种方式强制ELF目标文件的格式查找特定符号?
这应该是编译时链接器的问题。这些事情不是动态解决的,而是静态解决的。它应该会产生multiple definition如下例所示的错误(取自此处):
/tmp/ccscmcbS.o:(.bss+0x0): multiple definition of `global_base'
/tmp/ccyjhjQC.o:(.bss+0x0): first defined here
/tmp/ccscmcbS.o: In function `find_free_block':
support.c:(.text+0x0): multiple definition of `find_free_block'
/tmp/ccyjhjQC.o:main.c:(.text+0x0): first defined here
/tmp/ccscmcbS.o: In function `request_space':
support.c:(.text+0x55): multiple definition of `request_space'
/tmp/ccyjhjQC.o:main.c:(.text+0x55): first defined here
/tmp/ccscmcbS.o: In function `get_block_ptr':
support.c:(.text+0xfe): multiple definition of `get_block_ptr'
/tmp/ccyjhjQC.o:main.c:(.text+0xfe): first defined here
collect2: error: ld returned 1 exit status