Как обрабатывать несколько библиотек при экспорте символов?

Я работаю над проектом (кросс-платформенный, но в данном случае имеет значение только Windows), который создает много общих библиотек (которые в некоторой степени зависят друг от друга). Все заголовочные файлы, которые объявляют функции или структуры / classes / enums / etc. находятся в отдельной папке / include, но исходные файлы сгруппированы в модули.

Я создал макрос для импорта / экспорта _declspec, но мой вопрос заключается в следующем:

Должен ли я иметь другую директиву препроцессора, которая запускает экспортную версию для каждой библиотеки? Поскольку библиотеки могут использовать заголовки, принадлежащие другим библиотекам, важно ли, чтобы эти символы рассматривались как импорт?

Из того, что я тестировал в фиктивном проекте, вы можете использовать их все как символы экспорта, и они все еще работают, но разве это хорошая практика?

Спасибо.

3

Решение

Вы должны создать макрос, чтобы объявить экспорт для класса / функции, которую вы хотите экспортировать из вашей библиотеки.
все заголовки include (вашей зависимости) должны быть объявлены как Import. я не слежу за вами, как экспорт все время работает для вас (это не должно).

вот пример —

на 1-й библиотеке определите в .h файле. в файле проекта определите препроцессор __your_module_name>_DLL__

Заголовочный файл библиотеки 1:

#ifdef __<your_module_name>_DLL__
#define <your_module_name>_EXPORT __declspec(dllexport)
#else
#define <your_module_name>_EXPORT __declspec(dllimport)
#endif

class <your_module_name>_EXPORT someName
{
....
}

на 2-й библиотеке, если он импортирует 1-й файл заголовка библиотеки и предполагая, __<your_module_name>_DLL__ препроцесс не определен в файле проекта, someName класс будет imported скорее, чем exported,

это позволит вам правильно использовать перекрестные зависимости во время компиляции.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector