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 iifdef
s dla konkretnych celów?