|
|
  |
добавление на этапе компиляции префиксов к символам |
|
|
|
Jan 21 2012, 11:46
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Мне нужно сделать такую вот хитрую вещь - чтобы при сборке статической библиотеки ко всем символам, (достаточно только экспортированным) автоматически добавлялся какой либо заданный мной префикс. Суть вопроса в следующем: имеется десяток разных динамических библиотек, у всех них одинаковые экспортированные функции, их надо собрать статически в один модуль с основной программой. Сейчас я делаю тупо и нагло - собираю статическую библиотеку, получаю список экспортированных символов, после чего скриптом делаю файл "renames.h" вида "#define sym1 prefix_sym1 #define sym2 prefix_sym2" и так далее для всех символов, после чего этот инклудник включаю во все файлы библиотеки, пересобираю, и вуаля. А хочется сделать это красиво как-то. В связи с этим вопрос - есть ли опции в GCC и в MSVC для автоматического добавления юзерских префиксов ко всем символам компилируемого исходника? Или, может быть, это вообще как-то по-другому люди делают?
|
|
|
|
|
Jan 21 2012, 12:11
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
С++ не годится, все на чистом C, цель то именно без переработки исходников библиотек все сделать, они периодически обновляются, и не мной.
А вот может есть такой вариант - в тех местах, где вызывается библиотека, какой нить там прагмой указать, что символ именно из конкретной либы?
UPD хотя фигню наверное говорю, все равно куча дуплицированных символов у линкера вылезет, сомневаюсь что можно сделать так, чтобы приоритет имел символ, взятый из той же либы, откуда к нему обращение, чтобы либы друг с другом не конфликтовали.
|
|
|
|
|
Jan 22 2012, 18:58
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(SM @ Jan 21 2012, 15:46)  ...десяток разных динамических библиотек,...их надо собрать статически в один модуль...Сейчас я делаю.. - собираю статическую библиотеку... вы для начала определитесь - чего вы собираете. динамические или статические либы. и второе. динамические библиотеки можно грузить явно - тогда проблем вообще нет. (круглый)
|
|
|
|
|
Jan 23 2012, 02:26
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(kolobok0 @ Jan 22 2012, 22:58)  вы для начала определитесь - чего вы собираете. динамические или статические либы. IMHO я более чем ясно и однозначно поставил задачу. Внимательнее вопрос прочитайте, там все объяснено, что есть, и как это надо собрать. Если уж совсем в танке - то повторю "на пальцах" - есть у меня допустим три проекта, которые собираются в три динамические либы, в каждой из них есть символы sym1, sym2, sym3. Мне надо собрать из этих же исходников три статические либы, у которых эти символы будут уже называться lib1_sym1, lib2_sym1, lib3_sym1, lib1_sym2, lib2_sym2, и т.д. - при этом исходники не править (с правкой я и сам знаю как, даже описал весь этот процесс).
|
|
|
|
|
Jan 23 2012, 07:49
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
QUOTE (SM @ Jan 23 2012, 09:26)  есть у меня допустим три проекта, которые собираются в три динамические либы, в каждой из них есть символы sym1, sym2, sym3. Мне надо собрать из этих же исходников три статические либы, у которых эти символы будут уже называться lib1_sym1, lib2_sym1, lib3_sym1, lib1_sym2, lib2_sym2, и т.д. - при этом исходники не править (с правкой я и сам знаю как, даже описал весь этот процесс). Почему бы просто не заавтоматизировать то, что вы делаете руками: при компиляции очередного файла компилируется исходный файл, извлекается список экспортируемых имён, далее генерируется либо новый сорец с префиксными именами, либо как вы делали через дефайны, компилируется окончательный вариант. Исходный файл остаётся без изменений. Такую автоматизацию сделать совсем не сложно - вместо запуска только одного компилятора выполнить пакетный запуск набора инструментов. Недостаток - два раза компилировать надо, но насколько это критично, судить только вам.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Jan 23 2012, 19:46
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(SM @ Jan 23 2012, 06:26)  ...в каждой из них есть символы sym1, sym2, sym3. Мне надо собрать из этих же исходников три статические либы, у которых эти символы будут уже называться lib1_sym1, lib2_sym1, lib3_sym1, lib1_sym2, lib2_sym2, и т.д.. 1) уже прозвучало - нэймспэйсы. это если тупо инкапсулировать и не париться. 2) задефайнить префиксы и в условиях сборки задавать нужные закорючки. (круглый) ЗЫ ИМХО - всех кто в консерватории поставить перед танком и катками, дабы не выросли. Или по другому - надумано сие всё...
|
|
|
|
|
Jan 23 2012, 20:22
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
1) низзя. С++ нету там нигде ни грамма. 2) примерно так и делаю, неудобно, требует вмешательства в исходники, вот был бы ключ у компилера - всегда инклудить заданный инклуд перед всеми инклудами.... Ан нет.
танки и катки не помогут, не тот случай - эти исходники/либы - продукт одной очень большой фирмы, получаемый под договор о неразглашении и под лицензию. И периодически приходят их обновления. А мне надо все те либы ихние в один мой проект впихнуть, обязательно статически, и из-за описанной проблемы пролучается с обновлениями гемор из геморов - нельзя просто заменить исходники новыми и пересобрать, все операции с ними приходится каждый раз делать.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|