2012-04-14 1 views
7

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

+5

Зачем вам это нужно? Возможно, использование пространства имен позволит решить ваш вопрос? –

+0

Я компилирую код, который я получил от кого-то другого. Код многопоточный, и он пытается использовать старую, не потокобезопасную, библиотеку C. Решение, найденное человеком, написавшим приложение, состоит в том, чтобы иметь несколько копий библиотеки C, каждая из которых имеет другой префикс для своих имен символов. Затем каждый поток приложения вызывает другую версию функции. Так, например, если в старой библиотеке есть funcion oldlib_func, будут версии v1_oldlib_func, v2_oldlib_func, чтобы номер потока 1 вызывал v1_oldlib_func, а номер потока 2 вызывал v2_oldlib_func. – user1333800

+0

Лицо, написавшее приложение, должно было создать эти разные версии старой библиотеки с этими префиксами, дело в том, что я не получил эту часть кода, поэтому мне нужно взять исходный код библиотеки и найти способ добавить префикс имен символов. – user1333800

ответ

11

Я считаю, что this answer предоставит вам решение.

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

objcopy --prefix-символы = foo_ foo.o

3

* EDIT: George Skoptsov's solution ' лучше, чем у меня :). nm трюк может пригодиться.


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

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

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

+1

Я «люблю», как команда «objcopy» на самом деле не создает копию. – Puppy

+1

@DeadMG: он * может * создать копию (и делает, внутренне), но явно изменение на месте слишком полезно, чтобы не добавлять его. :) – ams

 Смежные вопросы

  • Нет связанных вопросов^_^