C++에서 일부 공유 라이브러리를 만들어야하고 Linux를 개발자 운영 체제로 사용했습니다. dlsym
/LoadLibrary
을 통해 심볼을로드하려는 경우 심볼을 표시 할 필요가 있다는 것을 알고 있습니다. 그래서 리눅스에서 내 모든 기호는이 패턴 다음 : 내가 사용할 C++ 11 연타를 사용Windows 및 Linux에서 [gnu :: visibility ("default")]] vs __declspec (dllexport)
extern "C" [[gnu::visibility("default")]] void f();
를하고 나는 나의 호스트 프로그램에 f
을로드 할 수 있었다. 내가 윈도우즈로 옮겼을 때 나는 C++ 11이 가능하도록 GCC 4.8.2를 사용했고 패턴은 윈도우 머신에서도 LoadLibrary
으로 작동했다. (새로운 속성 구문에 C++ 11을 사용해야했습니다.) Windows에서 공유 라이브러리에서 심볼을 내보내려면 __declspec(dllexport)
을 사용해야한다는 것을 알고 있습니다. 그럼 이제 어떡하지? __declspec(dllexport)
은 (는) 더 이상 필요 없습니까?
편집 :
나는 그 동의어가 (내가 생각하는) 것을 here을 발견 그래서 질문은이 __declspec(dllimport)
에 대한 [[gnu::attribute]]
특정 대상에 대해 매크로와 ifdef
의를 사용하지가 무엇입니까? 그것은가 자동으로 수출 모든 당신의 .dll
에서 즉 -