Есть ли способ добавить пространство имен во время компиляции? - PullRequest
3 голосов
/ 04 ноября 2011

Мне нужно написать плагин для приложения, которое статически включает в себя определенную библиотеку C ++, которая не использует пространства имен.

К сожалению, мой плагин должен ссылаться на настроенную версиюта же библиотека.

В идеале я хотел бы перекомпилировать ее, чтобы ее символы не совпадали с символами, найденными в приложении.

Один из способов сделать это, не редактируя сотни файлови не теряя возможности применять новые обновления из апстрима, можно было бы добавить префикс пространства имен к библиотеке во время компиляции .

Видимо, хотя * 1015 нет* возможность сделать это.Альтернативно, есть ли способ программно изменить символы в уже скомпилированном файле .so?


РЕДАКТИРОВАТЬ : чтобы уточнить, проблема не вграница библиотека-плагин, это «легкая» часть;проблема в том, что у меня есть эта огромная библиотека, и я хотел бы найти способ перекомпилировать ее, как если бы она все принадлежала определенному пространству имен без необходимости изменять исходный код.

Ответы [ 3 ]

1 голос
/ 04 ноября 2011

Почему бы не написать файл, который открывает пространство имен и затем включает файл, который у вас уже есть?

1 голос
/ 04 ноября 2011

Я не вижу простого решения. Вы можете написать GCC плагин или расширение в GCC MELT , чтобы выполнить эту работу, но это, вероятно, слишком много работы.

Если библиотека свободна, и если вам разрешено ее изменять, я сделаю исправления и отправлю их вверх по течению (даже если это займет некоторое время).

0 голосов
/ 04 ноября 2011

мы делаем это для одной из библиотек, с которыми связываем

namespace MY_NAMESPACE
{
 #include "api\api.h"
}

, затем просто вызовите его функции из нового пространства имен

MY_NAMESPACE::api_function();

РЕДАКТИРОВАТЬ: Я, возможно, здесь немного упустил момент, так как я не уверен, как это повлияет на символы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...