2012-05-10 3 views
0

JNI를 통해 Android 프로젝트에서 사용하는 C++ 코드베이스가 있습니다 (빌드 스크립트 등은 모두 Android 관련). 동일한 라이브러리의 이전 버전을 사용하는 Objective C 프로젝트를 업데이트해야합니다. 문제는 Objective C 코드 만 있지만 이전 C++ 코드 및 iOS makefile (외부 대행사에서 수행 한 것)이 아니라 단지 바이너리 .a 파일뿐입니다. JNI 코드에서 정적 iOS 라이브러리를 생성하려면 어떻게해야합니까? 지금 당장이 책을 읽으면서 : http://www.clintharris.net/2009/iphone-app-shared-libraries/ 그리고 도움이 필요하시면이 게시물을 더 자세히 업데이트 할 것입니다.Android NDK 라이브러리를 정적 iOS 라이브러리로 컴파일하는 방법

답변

0

사용하는 데 문제가 있습니까? 코드가 크로스 플랫폼이고 iOS에서 실행할 수 있다고 가정하면 새로운 메이크 파일 (Android는 전문화되어 있음)을 만들거나 새 XCode 프로젝트 또는 기존 XCode 프로젝트에서 파일을 드래그하기 만하면됩니다.

Apple의 Clang은 C, C++ 및 Obj-C를 컴파일 할 수 있습니다. 예를 들어 Obj-C와 C++을 혼합하여 파일 이름을 .mm으로 지정해야합니다.

예 메이크 (주 : 실수 만 설명한다!) : 앤디 - 로스 @ http://pastebin.com/ZyrsfT87

+0

덕분에 @nuskooler, 그래서 첫 번째 질문은'Application.mk'을 LLVM/GCC 빌드로 변환하는 방법이 될 것입니다 ... 이것에 대한 튜토리얼을 찾을 수 없습니다. 여러 개의'Makefile.Lib'도 같이 보이지만, 그들과 무엇을해야할지 모르겠습니다. 분명히'make : *** No targets. Stop.' – Gabor

+0

@ ber4444 여기 iOS 5.0.1 용 sqlite를 빌드하는 Makefile이 있습니다. 꽤 엉성하지 만 일반적인 개념을 설명해야합니다. 기본적으로 표준 Makefile을 다루고 있습니다 + GCC 또는 Clang/LLVM에 대한 몇 가지 추가 Apple 명령입니다. http://pastebin.com/ZyrsfT87 – NuSkooler

0

막혔습니다. iOS와 Android는 동일한 ABI를 공유하지 않습니다. 링커 매직을 사용하여 ELF 공유 라이브러리에서 심볼을 빼내고 Mach 바이너리에 연결할 수 있다고해도 인수 전달 및 스택 프레임 설정과 같은 기능이 다르기 때문에 함수가 충돌합니다 (솔직히 세부 사항을 알지 못합니다. iOS는 EABI가 아닙니다). 이것은 각 기능에 대해 어셈블리 레벨 썽킹 레이어를 작성하거나 생성하려는 경우 겨우 가능합니다. 그러나 기본적으로 : 당신은 SOL입니다.

+0

감사합니다,하지만 난 바이너리 호환성에 대해 생각하고 있지 않다 - 나는 그냥 확인을 구축하는 방법 소스 파일을 가지고 iOS의 경우 및 NDK 관련 부분을 이식하는 방법에 대해 설명합니다. 곧 내 질문이 세부 사항으로 업데이트 될 것입니다. – Gabor

관련 문제