Вопрос по c++, c, gcc – Как я могу заставить gcc добавить префикс ко всем именам символов

9

Я знаю, что в прошлом была возможность-fprefix-function-name это добавит префикс ко всем сгенерированным символам, он больше не является частью gcc. Есть ли другой способ сделать это?

Зачем тебе это нужно? Возможно, использование пространства имен решит вашу проблему? George Skoptsov
Человек, который написал приложение, должен был создать эти разные версии старой библиотеки с этими префиксами. Дело в том, что я не получил эту часть кода, поэтому мне пришлось взять исходный код библиотеки и найти способ добавить префикс. к именам символов. danielhauagge
Я компилирую код, полученный от кого-то другого. Код является многопоточным, и он пытается использовать старую, не поточно-безопасную библиотеку C. Решение, найденное человеком, написавшим приложение, состоит в том, чтобы иметь несколько копий библиотеки C, каждая из которых имеет свой префикс к своим именам символов. Затем каждый поток приложения вызывает свою версию функции. Так, например, если в старой библиотеке есть функция oldlib_func, будут версии v1_oldlib_func, v2_oldlib_func, чтобы поток номер 1 вызывал v1_oldlib_func, а поток номер 2 вызывал v2_oldlib_func. danielhauagge

Ваш Ответ

2   ответа
12

этот ответ даст вам решение.

Короче говоря, вы можете «префикс» символы в существующей библиотеке с использованиемobjcopy как это:

objcopy --prefix-symbols=foo_ foo.o

Error: User Rate Limit Exceeded
3

Решение Георгия Скопцовалучше моего :)nm трюк может пригодиться, хотя.

Это не совсем то, что вы ищете, но в прошлом мне приходилось делать что-то подобное (переименование символов, экспортируемых библиотекой)

Если вы знаете названия символов, которые хотите переопределить, вы можете попробовать использоватьobjcopy --redefine-syms old=new , Смотрите man-страницы objcopy для более подробной информации о входных данных (objcopy может перезаписать ваш файл, поэтому будьте осторожны с этим)

Если вы не знаете названия символов, вы можете попробовать использоватьnm чтобы получить список символов. Опять же, поскольку я не уверен, какие символы вы ищете, справочные страницы, вероятно, будут вашим лучшим выбором.

Error: User Rate Limit ExceededobjcopyError: User Rate Limit Exceeded
@DeadMG: этоcanError: User Rate Limit Exceeded

Похожие вопросы