2012-04-14 8 views
7

Sé que en el pasado existía una opción -fprefix-function-name que agregaría un prefijo a todos los símbolos generados, ya no parece ser parte de gcc. Hay alguna otra manera de hacer esto?Cómo puedo obtener gcc para agregar un prefijo a todos los nombres de símbolos

+5

¿Por qué necesita hacer esto? ¿Tal vez usar un espacio de nombres resolvería tu problema? –

+0

Estoy compilando el código que obtuve de otra persona. El código tiene múltiples hilos y está tratando de usar una biblioteca C antigua, no segura para subprocesos. La solución encontrada por la persona que escribió la aplicación es tener varias copias de la biblioteca C, cada una de las cuales tiene un prefijo diferente a sus nombres de símbolo. Luego, cada hilo de la aplicación llama a una versión diferente de la función. Entonces, por ejemplo, si la biblioteca anterior tiene una función oldlib_func, existirían las versiones v1_oldlib_func, v2_oldlib_func, de modo que el hilo número 1 llamaría a v1_oldlib_func y el número de hilo 2 llamaría a v2_oldlib_func. – user1333800

+0

La persona que escribió la aplicación tuvo que crear estas versiones diferentes de la biblioteca anterior con estos prefijos, el problema es que no obtuve esa parte del código, así que tengo que tomar el código de la biblioteca original y encontrar una manera de agregar una prefijo a los nombres de los símbolos. – user1333800

Respuesta

11

Creo que this answer le dará la solución.

En resumen, se puede 'prefijo' símbolos en una biblioteca existente utilizando objcopy así:

objcopy --prefix-symbols = loquesea _ foo.o

3

* EDIT: George Skoptsov's solution ' es mejor que el mío :) El truco nm puede ser útil.


Esto no es exactamente lo que está buscando, pero he tenido que hacer algo similar en el pasado (cambio de nombre de los símbolos exportados por una biblioteca)

Si conoce los nombres de los símbolos que desea redefinir puede intentar usar objcopy --redefine-syms old=new. Consulte las páginas man de objcopy para obtener más detalles sobre la entrada (objcopy puede sobreescribir su archivo así que tenga cuidado con eso)

Si no conoce los nombres de los símbolos, puede intentar usando nm para obtener una lista de símbolos. Nuevamente, dado que no estoy seguro de qué tipo de símbolos está buscando, las páginas man serán probablemente su mejor opción.

+1

Me encanta cómo un comando llamado 'objcopy' no produce, de hecho, una copia. – Puppy

+1

@DeadMG: * puede * producir una copia (y lo hace, internamente), pero una modificación clara en el lugar es una característica demasiado útil para no agregarla. :) – ams

Cuestiones relacionadas