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?
Odpowiedz
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
* 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.
Dlaczego musisz to zrobić? Być może użycie przestrzeni nazw rozwiązałoby twoje probem? –
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
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