Windows下的objcopy相当于什么?(解决库符号冲突的黑科技)

11

我正在寻找一个Windows版本的GNU工具 objcopy。我想要实现这里发布的建议来解决我的问题,然而我需要在不同平台(Windows、Linux和Mac)上进行操作。 我在Google上没有找到答案,所以也许解决方案需要有所不同。谢谢!


对于在 Visual C++ 构建的文件上使用,或者在 MinGW/Cygwin 构建的文件上使用?在后一种情况下,你可以直接使用 objcopy - Some programmer dude
它是Visual C++生成的文件。 - Erunehtar
我不知道这是否适用于您,但您可以从ELF Linux版本开始,使用objcopy,然后尝试使用此处发布的工具将其转换为COFF / PE:agner.org/optimize。 - Jekyll
2个回答

6

默认的MSVC工具包含以下命令:LIB /EXTRACT用于提取对象的副本;LIB /REMOVE用于从库中删除对象。

我认为当您将目标文件放回时,LIB /DEF /EXPORT:externalName=internalName也会对您有所帮助。


这会允许我在符号上加前缀吗? - Erunehtar
@Deathicon:我没有尝试过,但我相信EXPORT:prefix_Symbol=Symbol就是这样做的。 - MSalters
我遇到了这个问题,但是无法使用静态库来解决。你有一些相关链接可以演示这个解决方案吗? - Guillaume Gris

0

如果您不介意使用hack的方法,可以在库文件中将所有冲突名称的实例替换为相同长度的不同名称。但请自行承担风险。

例如:

// a.h
void doSomething();

// b.h
void doSomething();

我们可以将 doSomething 替换为 doSomethink

在 Python 中,这将类似于:

f = open('b.lib',"rb")
s = f.read()
f.close()
s = s.replace(b'doSomething',b'doSomethink')
f = open('b.lib',"wb")
f.write(s)
f.close()

并相应修改 b 标题

// b.h
void doSomethink();

请注意,此处我使用了头文件中定义的普通函数名称来匹配二进制文件中的符号,但您可能希望改用完整的名称以防止不必要的替换。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接