Как автоматически экспортировать имена в C ++ источник для использования в DLL - PullRequest
1 голос
/ 03 января 2012

У меня есть библиотека, написанная на C ++ (и у меня есть ее полный источник). Из-за его лицензии LGPL я могу использовать его только с проприетарным программным обеспечением моей компании через динамическую связь (статическая связь работает отлично). Итак, мне нужно встроить его в DLL. Тем не менее, библиотека довольно большая и ничего не экспортирует (следовательно, нет файла .def и нет __declspec (dllexport) статов перед именем класса и глобальными функциями). Поэтому, когда я создаю dll, это бесполезно, так как у него нет экспортированных имен, поэтому он не будет ссылаться. В нашей компании мы используем MS Visual C ++, который по умолчанию делает не экспортировать имена (в то время как, например, GNU GCC, при запуске через MINGW в Windows). Итак, единственная опция, которую я вижу в данный момент, - это поместить __declspec (dllexport) перед каждым именем в библиотеке, которую я использую (а их тысячи), или записать файл .def для этих имен. Но даже если я это сделаю, я не смогу использовать следующую версию библиотеки, как мне придется делать эту работу снова. Я искал инструмент, который выполняет этот экспорт или генерирует файл .map, но никто на самом деле не выполняет эту конкретную задачу (есть некоторые генераторы DEF, но они в основном ищут результат DUMPBIN / EXPORT, который ничего не дает в моем случае). Я искал ответы в Интернете уже два дня, но безрезультатно.

С уважением, Андрей

Ответы [ 2 ]

1 голос
/ 03 января 2012

IANAL Но если библиотека LPGL, они должны быть открыты для динамического связывания.

Рассматривали ли вы изменение исходного файла и обновление Makefile, чтобы дать способ генерировать динамическую библиотеку иполучить одобрение сопровождающего?Скорее всего, они будут открыты для него, и будущие версии будут просто работать.

0 голосов
/ 04 января 2012

Не думаю, что вам нужна такая автоматизация.

Мое предложение - редактирование исходного кода (как вы сказали); используя макросы Notepad ++ или Replace Pioneer

Привет

...