C ++ [[gnu :: visibility («default»)]]] против __declspec (dllexport) в Windows и Linux
Мне нужно было создать несколько общих библиотек на C ++, и я использовал Linux в качестве операционной системы для разработчиков. Я знаю, что мне нужно сделать символы видимыми, если я хочу загрузить их через /dlsym
LoadLibrary
, Так что в Linux все мои символы следовали этой схеме:
extern "C" [[gnu::visibility("default")]] void f();
Я использовал Clang с включенным C ++ 11 и смог загрузитьf
в моей принимающей программе. Когда я перешел на Windows, я использовал GCC 4.8.2 с включенным C ++ 11, и этот шаблон работал на машине Windows сLoadLibrary
, (Мне нужно было использовать C ++ 11 для нового синтаксиса атрибутов). Я знаю, что на окнах мне нужно использовать__declspec(dllexport)
экспортировать символы из общей библиотеки. И что теперь? Является__declspec(dllexport)
не требуется больше?
Редактировать:
я нашелВот что это синонимы (я думаю), поэтому вопрос в том, есть ли[[gnu::attribute]]
за__declspec(dllimport)
избегать использования макросов иifdef
для конкретных целей?