2011-09-14 4 views
2

XCode에서 C++ 라이브러리를 래핑하는 데 도움이 필요합니다.XCode에서 C++ 라이브러리 래핑

달성하고자하는 것은 XCode에서 새 라이브러리를 만들고, C++ 라이브러리 (.a 및 .h 파일)를 가져 와서 Obj-C로 포장하여 MonoTouch로 가져올 수 있도록하는 것입니다.

내가 둥근 방식으로하는 이유는 이름 변환 때문에 C++ lib를 MonoTouch로 가져 오려고 할 때 WrongEntryPoint 예외가 계속 발생하기 때문입니다. 잘못된 것이면 나를 정정하십시오. 그러나 컴파일러에 의존하는 맹 글링 된 이름을 찾아 낼 방법이 없습니다.

내가 틀렸다하지만 나 컴파일러에 따라 달라집니다 엉망이 이름을 찾을 수있는 방법이없는 경우

답변

2

저를 수정 미리 감사합니다.

기술적으로 가능합니다. 대부분의 컴파일러는 아마 가장 유용하고 오래 지속되는 아이테니엄 ;-) 그것은 자신의 고통을 가져올 것이다 그러나

(예 : 비 기본 유형, 다른 컴파일러) 및 유지 보수 문제에서 선물을 당신이 당신의 C를 업데이트 같은 mangling syntax, 공유 ++ 암호.

당신은 더 나은에 의해 제공됩니다 :

  • 오브젝티브 -c 래퍼를 작성하고 생성 된 바인딩에 MonoTouch의 btouch 도구를 사용하여;

  • C 래퍼를 작성하고 .NET p/invoke를 사용하여 코드를 호출하십시오.

선택이 당신하지만 당신은 다른 곳에서 C++/C# 코드를 재사용에 대해 생각하는 경우 (예를 들어, 모노 안드로이드) 다음 C 및 P 을 사용/재사용 될 것입니다 호출합니다.

2

Obj-C 라이브러리에서 라이브러리를 래핑하고 btouch를 사용하여 라이브러리를 MonoTouch로 가져 오는 경로를 반드시 수행 할 것을 권장합니다. 최근 Sybase 데이터베이스 엔진을 구현 한 C++ 라이브러리에서이 작업을 수행했습니다. 내 질문을 보면 C++ 라이브러리를 래핑하는 것과 관련하여 몇 가지 사실을 발견했다.

특히, 이러한 질문 볼 수 있습니다 :

Linking to a C++ native library in MonoTouch

Wrapping a C++ library in Objective-C is not hiding the C++ symbols

Application with static library runs on simulator but not on actual device

Undefined symbols when linking PhoneGap static library in MonoTouch

Linker options 'Link all assemblies" and "Link SDK assemblies only" causes undefined symbols in 3rd party static library

Obj-C 래퍼의 경로를 살펴볼 때 btouch를 사용하여 출력 코드를 작성하고 btouch에서 dll을 포함하는 대신 프로젝트에 포함시키는 것이 좋습니다. 내 경험에 비추어 볼 때,이 코드는 dll보다 더 안정적으로 작동했다. 그러나 dll의 문제는 지금까지 해결되었을 수도있다.그러나 btouch 문제와 관련이 질문에 대해 살펴 :

Exception System.InvalidCastException when calling a method bound with btouch that returns an object. MonoTouch bug?

여기에 그들에게 몇 가지 코드를 게시하고 내가 확신하는 I 또는 다음의 Obj-C 래퍼를 구축 구체적인 질문/문제가있는 경우 커뮤니티의 다른 회원이 귀하를 도울 수 있습니다.

1

브루스, 내가 생각한대로 C++ 코드를 래핑하는 데 문제가 있습니다. 시간과 시간을 읽고 독서를하다가 C++ 코드를 감쌀 수 없었습니다.

어쨌든, 나는 더미 클래스로 만든 간단한 Obj-C 라이브러리를 만든 다음 다른 라이브러리로 가져올 수있었습니다. 그게 잘 됐어. 그러나 동일한 패턴을 따라, 나는 .h 파일과 함께 C++ .a 파일을 포함 시켰습니다. (빌드 옵션에서 헤더 파일을 연결할 수 있기 때문에 .h가 필수인지는 확실하지 않습니다.) 그리고 컴파일했을 때, 좋아, 빌드가 성공했지만 XCode는 새로운 .a 라이브러리를 생성하지 못했습니다.

링커 플래그를 추가했습니다. -ObjC -lNameOfLib C++ 표준 라이브러리 유형이 빌드 - 정적이어야합니까? 그리고 기호는 기본적으로 숨겨져 있습니까?

다양한 지침이 많기 때문에 단계별로 쓸 수 있으면 좋겠지 만 끝까지 밀어 낼 수는 없습니다.

나는 조금 ..

... 너희들을 혼동 감사 해요
관련 문제