저는 C++과 gcc와 관련된 모든 것에 초보자이기 때문에 잠재적으로 중요한 것을 이해해야합니다.XCode 및 iPhone SDK : C++ 표준 라이브러리 유형?
"___gxx_personality_v0"에서 참조 : 나는 동적에서 C++ 표준 라이브러리 유형을 변경하는 경우
(기본 내가 출력이 새로운 아이폰 프로젝트에 파일을 .mm 사용하는 경우이 오류 정적 LIB 얻을 수있다) 정적 오류가 사라집니다. SDK의 제한 사항입니까? 동적 라이브러리에서 Obj-C++ 확장을 활성화 할 수 있습니까? 나는 초심자이고 내가 여기서 말하는 것에 대해서만 모조하는 것을 명심하십시오. 또한 이러한 설정 간의 차이점을 알고 싶으면 변경하는 것이 잠재적으로 부정적인 영향을 미치는지 알고 싶습니다. 동적 라이브러리가 빌드시 최종 바이너리에 정적 라이브러리가 링크되는 동안 런타임시로드된다는 점에서 제 가정은 정확합니까? 그렇다면 왜 iPhone SDK가 동적 라이브러리를 만들 수 있습니까? iPhone에 타사 라이브러리를 설치하여 앱간에 공유 할 수는 없습니다.
업데이트 몇 명의 사람들이 응답했으며 답변에 감사드립니다. 그러나 나는 원래의 질문에서 오해 된 것처럼 보이는 것을 명확히하고 싶다. 파일 형식을 ".m"에서 ".mm"으로 바꾸는 것이 대답이 아니라 예외를 유발 한 것입니다. 상황은 이것입니다. ".mm"확장자를 가진 Obj-C++ 파일을 사용하는 iPhone 용 정적 라이브러리를 개발하십시오. 그런 다음 iPhone 응용 프로그램 (또는 단원 테스트 스위트)에서이 라이브러리를 사용하십시오. 클라이언트 대상이 기본값 인 "동적"대신 "정적"을 사용하도록 전환되지 않으면 Std C++ 라이브러리 유형에이 오류가 표시됩니다. 원래이 설정을 변경하여 미묘한 오류가 발생할 수 있다고 생각했지만 차이점을 이해하고 기본값이 일반적인 사용 사례와 반대되는 방식으로 설정된 이유는 무엇입니까?
내 파일의 이름을 바꾸어 오류의 원인을 찾았습니다. 나는 ".m"을 Obj-C++에 사용합니다.하지만 ".M"도 사용할 수 있다고 들었습니다. 내 문제는 std C++ 라이브러리 유형에 대해 "정적"을 사용하여 영향을받는 대상이 무엇인지 모르겠다는 것입니다. 나는 또한 디폴트가 dynamic으로 설정된 이유를 이해하지 못한다. – Cliff
OS와 함께 출시 된 최신 버전을 사용하도록 동적으로 설정됩니다. 정적으로 링크하면 앱이 항상 최신 버전과 동일한 버전을 사용하게됩니다. 또한 여러 응용 프로그램이 동일한 코드를 공유 할 수 있으므로 OS가 더 효율적입니다. –
C++ 코드에 대해 객관적인 C++ ro 링크를 사용하는 코드에 .m 파일을 사용하지 마십시오. 이것은 당신이 발견 한 링커 문제로 이어질 것입니다. –