C ++ [[gnu :: visibility («default»)]]] против __declspec (dllexport) в Windows и Linux

Мне нужно было создать несколько общих библиотек на C ++, и я использовал Linux в качестве операционной системы для разработчиков. Я знаю, что мне нужно сделать символы видимыми, если я хочу загрузить их через /dlsymLoadLibrary, Так что в 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для конкретных целей?

Ответы на вопрос(1)

Ваш ответ на вопрос