2015-01-22 3 views
0

약간 짜증이납니다.C++ 정적 라이브러리를 동적 라이브러리에 연결

전 프로젝트가 완전히 동적으로 링크되어 있지만 정적으로 링크되도록 고안된 라이브러리를 사용하고 싶습니다./MT 플래그를 사용하면 별도의 DLL을 작성하여 링크 할 수 있습니까? 정적 libs 그리고 그 링크 내 프로젝트에서?

나는 서둘러 설명하는 것에 사과한다. 나는 꽤 피곤하다.

문제의 라이브러리는 총알 물리학 라이브러리입니다.

편집 : 글쎄, 더 많은 인터넷 검색 결과와 함께/MD/MDd 컴파일 된 버전 인 이있을 수 있습니다. 위치가 확실하지 않습니다. 이 페이지에 따르면 : (아무도 관심에 대한)

편집 http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=9&t=3846

"전체 엔진이/MD 플래그로 컴파일 경우에 당신은 총알의 '해제 DLL'버전을 사용 당신은해야한다./MD로 컴파일 된 라이브러리와/MT로 컴파일 된 라이브러리를 함께 사용하지 마십시오. 주요 차이점입니다. 총알에 대한 별도의 DLL (.dll) 파일은 없습니다. "

편집 : 그리고 MSVC 런타임 라이브러리를 사용하여 빌드하면 실패합니다.

요컨대, 나는 무엇을해야할지 모른다.

을 cmake의 전체 라이브러리를 구축, 비주얼 스튜디오 (12) 2013 컴파일러를 사용하여 :

그는 내가 뭘하는지입니다. 그런 다음 cmake가 빌드 한 프로젝트를 빌드하여 필요한 모든 프로젝트를 빌드하십시오.

이것은 제공된 지침입니다. Here

마지막 편집 : 도움을 주셔서 대단히 감사합니다. 내가 말 맞춤법 실수 죄송합니다

에서 구축 관리, 나는 당시 매우 피곤했다 : 3

+0

런타임이 일치하지 않기 때문에 대답은 아니오라고 생각합니다.당신은 최악의 상황에서 손상된 메모리로 끝날 수 있고, 최선으로 링크 오류가 발생할 수 있다고 생각합니다. –

+0

나는 이것도 할 수있는 것에 관심이있을뿐 아니라 그것에 대해 더 많이 배우는 것에 대해서 내가 틀렸기를 바란다. –

+0

정말 실망스럽고 인터넷은 실제로 포럼을 포함하여 주제에 관한 정보가 아주 부족하다. . – ComedyGold

답변

1

짧은 대답은, 예.

동적 라이브러리 링크 만 있으면 될 수 있지만 라이브러리 작성 방법 (상태 정보 등)에 따라 심각한 문제가 발생할 수있는 시나리오가 있습니다.

더 많은 작업이 있지만 래퍼 DLL이 가장 안전한 방법 일 것입니다. 그러나 이것은 라이브러리에서 제공하는 전체 API가 아니라 응용 프로그램의 다양한 구성 요소에서 실제로 호출 된 함수를 래핑하면된다는 점에서 상쇄됩니다. 또한 모호함을 방지하기 위해 실제로 랩하는 함수에 약간의 이름을 바꿀 필요가 있습니다.

편집 : 개인적으로 익숙하지 않았기 때문에 총알 물리학 라이브러리를 살펴보고 처음에 대답 한 후에 옵션에 대해 궁금해했습니다. 라이브러리의 동적 빌드를 지원하지 않는다는 점에 대해 명시 적으로 언급 한 경우 실제로 사용하는 함수를 모두 래핑하는 것이 확실히 안전 할 것입니다. 그거 끔찍해. 나는 그것이 너무 큰 횡단면이 아니기를 바랍니다.

+0

문제는 명시 적으로 bullet 라이브러리가/MT 플래그를 사용하여 컴파일된다는 것입니다. 제 이해에서 두 런타임과 연결할 수 없습니다. – ComedyGold

+0

나는 너를 부러워하지 않는다. – frasnian

+0

편집 후, OP,이 사람은 맞습니다 –

관련 문제