Эквивалент objcopy для Windows?(Хак для устранения конфликтов символов lib)
Вопрос
Я ищу эквивалент инструмента GNU для Windows. объектная копия.Я хочу реализовать предложение опубликовано здесь к моей проблеме, однако мне нужно сделать это кроссплатформенным (Windows, Linux и Mac).Я не смог найти ответ у своего друга в Google, поэтому, возможно, решение нужно реализовать по-другому.Спасибо!
Решение
Часть инструмента MSVC по умолчанию: LIB /EXTRACT
извлекает копию объекта;LIB /REMOVE
затем удаляет его из библиотеки.
Я думаю, что LIB /DEF /EXPORT:externalName=internalName
также будет вам полезным, когда вы поставите файл объекта обратно.
Другие советы
Если вы не против взлома, замена всех экземпляров конфликтующего имени другим именем той же длины в одном из 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();
Обратите внимание, что здесь я использовал простое имя функции, определенное в заголовке, чтобы оно соответствовало символу в двоичном файле, но вместо этого вы можете использовать полное искаженное имя, чтобы предотвратить нежелательные замены.