2012-04-14 16 views
7

Wiem, że w przeszłości była opcja -fprefix-function-name, która dodawałaby prefiks do wszystkich wygenerowanych symboli, nie wydaje się już częścią gcc. Czy jest jakiś inny sposób na zrobienie tego?Jak mogę dodać gcc, aby dodać prefiks do wszystkich nazw symboli?

+5

Dlaczego musisz to zrobić? Być może użycie przestrzeni nazw rozwiązałoby twoje probem? –

+0

Kompiluję kod, który dostałem od kogoś innego. Kod jest wielowątkowy i stara się używać starej, bezpiecznej biblioteki C. Rozwiązanie znalezione przez osobę, która napisała aplikację, ma wiele kopii biblioteki C, z których każda ma inny prefiks do jej nazw symboli. Następnie każdy wątek aplikacji wywołuje inną wersję funkcji. Na przykład, jeśli stara biblioteka ma funcik oldlib_func, pojawiłyby się wersje v1_oldlib_func, v2_oldlib_func, dzięki czemu wątek numer 1 wywoływałby v1_oldlib_func, a wątek numer 2 wywoływał v2_oldlib_func. – user1333800

+0

Osoba, która napisała aplikację, musiała utworzyć te różne wersje starej biblioteki z tymi prefiksami, chodzi o to, że nie dostałem tej części kodu, więc muszę pobrać oryginalny kod biblioteki i znaleźć sposób na dodanie przedrostek do nazw symboli. – user1333800

Odpowiedz

11

Wierzę, że this answer da ci rozwiązanie.

W skrócie, można 'przedrostek' symbole w istniejącej biblioteki używając objcopy tak:

objcopy prefix-symbole = foo_ foo.o

3

* EDIT: George Skoptsov's solution " jest lepszy niż mój :) Jednak sztuczka nm może się przydać.


To nie jest dokładnie to, czego szukasz, ale musiałem zrobić coś podobnego w przeszłości (zmiana nazwy symboli eksportowanych przez bibliotekę)

Jeśli znasz nazwy symboli ty chcesz przedefiniować, możesz spróbować użyć objcopy --redefine-syms old=new. Zobacz strony podręcznika objcopy, aby uzyskać więcej szczegółów na temat danych wejściowych (objcopy mogą nadpisać twój plik, więc bądź ostrożny)

Jeśli nie znasz nazw symboli, możesz spróbować użyć numeru nm, aby uzyskać listę symboli. Ponownie, ponieważ nie jestem pewien, jakiego rodzaju symboli szukasz, strony podręcznika będą prawdopodobnie najlepszym wyborem.

+1

"Kocham", że polecenie o nazwie "objcopy" w rzeczywistości nie tworzy kopii. – Puppy

+1

@DeadMG: to * może * wytworzyć kopię (i wewnętrznie), ale wyraźna modyfikacja w miejscu jest zbyt użyteczna, aby jej nie dodawać. :) – ams