C ++ [[gnu :: visibility („default”)]] vs __declspec (dllexport) w systemie Windows i Linux

Musiałem utworzyć kilka współdzielonych bibliotek w C ++ i użyłem linuxa jako mojego systemu operacyjnego dla programistów. Wiem, że muszę wyświetlić symbole, jeśli chcę je załadowaćdlsym/LoadLibrary. Tak więc w Linuksie wszystkie moje symbole były zgodne z tym wzorem:

extern "C" [[gnu::visibility("default")]] void f();

Użyłem clang z włączonym C ++ 11 i mogłem załadowaćf w moim programie hosta. Kiedy przeniosłem się do systemu Windows, użyłem GCC 4.8.2 z włączonym C ++ 11 i ten wzór działał również na maszynie z WindowsLoadLibrary. (Potrzebowałem użyć C ++ 11 do nowej składni atrybutów). Wiem, że w oknach muszę użyć__declspec(dllexport) eksportować symbole z biblioteki współdzielonej. Co teraz? Jest__declspec(dllexport) nie jest już potrzebny?

Edytować:

znalazłemtutaj że są to synonimy (tak myślę), więc pytanie brzmi, czy istnieje[[gnu::attribute]] dla__declspec(dllimport) aby uniknąć używania makr iifdefs dla konkretnych celów?

questionAnswers(1)

yourAnswerToTheQuestion