Windows的objcopy等价物? (用于冲突lib符号的Hack)

时间:2013-11-18 16:03:44

标签: c++ collision symbols libs

我正在寻找Windows等效的GNU工具 objcopy 。我正在寻求实现suggestion posted here我的问题,但我需要跨平台(Windows,Linux和Mac)。我在谷歌朋友找不到答案,所以解决方案可能需要以不同的方式实施。谢谢!

2 个答案:

答案 0 :(得分:4)

部分默认MSVC工具:LIB /EXTRACT提取对象的副本; LIB /REMOVE然后将其从库中删除。

我认为当您将目标文件放回来时,LIB /DEF /EXPORT:externalName=internalName对您也有好处。

答案 1 :(得分:0)

如果您不介意黑客,则可以在一个库bin文件中用相同长度的其他名称替换冲突名称的所有实例。这样做需要您自担风险。

示例

// 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();

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