C ++에 대한 나의 주요 불만 중 하나는 실제로 동적 라이브러리 (예 : dll / so) 경계 외부에서 std 라이브러리 객체를 전달하는 것이 얼마나 어렵다는 것입니다.
표준 라이브러리는 종종 헤더 전용입니다. 멋진 최적화를 수행하기에 좋습니다. 그러나 dll의 경우 std 라이브러리 컨테이너의 내부 구조 / 코드에 영향을 줄 수있는 다른 컴파일러 설정으로 빌드되는 경우가 많습니다. 예를 들어, MSVC에서 하나의 dll은 반복자 디버깅을 사용하여 빌드하고 다른 DLL은 그것을 해제하여 빌드 할 수 있습니다. 이 두 dll은 표준 컨테이너를 전달하는 데 문제가 발생할 수 있습니다. std::string
내 인터페이스에 노출 되면 클라이언트가 사용하는 코드 std::string
가 내 라이브러리와 정확히 일치 한다고 보장 할 수 없습니다 std::string
.
이로 인해 문제, 두통 등을 디버그하기가 어렵습니다. 이러한 문제를 방지하기 위해 조직의 컴파일러 설정을 엄격하게 제어하거나 이러한 문제가없는보다 간단한 C 인터페이스를 사용합니다. 또는 클라이언트가 사용해야 할 예상 컴파일러 설정을 지정하십시오 (다른 라이브러리가 다른 컴파일러 설정을 지정하면 짜증납니다).
내 질문은 C ++ 11이 이러한 문제를 해결하기 위해 무엇을 시도했는지 여부입니다.
DLL
s 사이가 어렵습니다 . 사이에서 SO
그것은 항상 잘 작동했습니다.