¿Un equivalente de objcopy para Windows?(Hack para chocar símbolos lib)
Pregunta
Estoy buscando un equivalente para Windows de la herramienta GNU. objetocopia.Estoy buscando implementar el sugerencia publicada aquí a mi problema, sin embargo necesito hacerlo multiplataforma (Windows, Linux y Mac).No pude encontrar la respuesta en mi amigo de Google, por lo que quizás la solución deba implementarse de manera diferente.¡Gracias!
Solución
Parte de las herramientas predeterminadas de MSVC: LIB /EXTRACT
extrae una copia de un objeto; LIB /REMOVE
luego lo elimina de la biblioteca.
Creo LIB /DEF /EXPORT:externalName=internalName
También sería beneficioso para usted cuando vuelva a colocar el archivo objeto.
Otros consejos
Si no le importa un truco, puede funcionar reemplazar todas las instancias del nombre en conflicto por un nombre diferente de la misma longitud en uno de los archivos bin de la biblioteca.Haga esto bajo su propio riesgo.
Ejemplo
// a.h
void doSomething();
// b.h
void doSomething();
podemos reemplazar doSomething
por doSomethink
En Python sería algo como:
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()
Y modifique el encabezado b en consecuencia
// b.h
void doSomethink();
Tenga en cuenta que aquí utilicé el nombre de la función simple tal como se define en el encabezado para que coincida con el símbolo en el binario, pero es posible que desee utilizar el nombre completo alterado para evitar reemplazos no deseados.