Эквивалент objcopy для Windows?(Хак для устранения конфликтов символов lib)

StackOverflow https://stackoverflow.com//questions/20052228

  •  26-12-2019
  •  | 
  •  

Вопрос

Я ищу эквивалент инструмента 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();

Обратите внимание, что здесь я использовал простое имя функции, определенное в заголовке, чтобы оно соответствовало символу в двоичном файле, но вместо этого вы можете использовать полное искаженное имя, чтобы предотвратить нежелательные замены.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top