gpt4 book ai didi

linux - 如何提取包含重复目标文件的静态库?

转载 作者:IT王子 更新时间:2023-10-29 00:34:06 24 4
gpt4 key购买 nike

我正在尝试构建一个合并两个静态库的大型静态库。此刻我正在使用“ar”命令,例如从“a.a”和“b.a”中提取对象,然后再次使用“ar”重新组合这些对象:

$ ar x a.a
$ ar x b.a
$ ar r merged.a *.o

不幸的是,它不适合我的目的,因为 a.a 在内部具有相同名称的不同对象。 “ar”命令正在提取重复的对象并用相同的名称替换已经提取的对象。即使名称相同,这些对象也有不同的符号,所以我得到了 undefined reference ,因为一些符号与被替换的文件一起被遗漏了。

我无法访问原始对象,并且已经尝试过“ar xP”和“ar xv”以及许多“ar stuff”。谁能帮我展示如何合并这些库?

提前致谢。

最佳答案

我试过“ar p”,但与 friend 交谈后决定以下 python 解决方案可能更好。现在可以提取重复的目标文件。

def extract_archive(pathtoarchive, destfolder) :

archive = open(pathtoarchive, 'rb')

global_header = archive.read(8)
if global_header != '!<arch>\n' :
print "Oops!, " + pathtoarchive + " seems not to be an archive file!"
exit()

if destfolder[-1] != '/' :
destfolder = destfolder + '/'

print 'Trying to extract object files from ' + pathtoarchive

# We don't need the first and second chunk
# they're just symbol and name tables

content_descriptor = archive.readline()
chunk_size = int(content_descriptor[48:57])
archive.read(chunk_size)

content_descriptor = archive.readline()
chunk_size = int(content_descriptor[48:57])
archive.read(chunk_size)

unique_key = 0;

while True :

content_descriptor = archive.readline()

if len(content_descriptor) < 60 :
break

chunk_size = int(content_descriptor[48:57])

output_obj = open(destfolder + pathtoarchive.split('/')[-1] + '.' + str(unique_key) + '.o', 'wb')
output_obj.write(archive.read(chunk_size))

if chunk_size%2 == 1 :
archive.read(1)

output_obj.close()

unique_key = unique_key + 1

archive.close()

print 'Object files extracted to ' + destfolder + '.'

关于linux - 如何提取包含重复目标文件的静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9199806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com