2016-12-05 2 views
1

나는 한 걸음 물러서서 일하기위한 간단한 개념 증명을 얻으려고합니다.정적 라이브러리를 Xamarin iOS 프로젝트에 바인딩

이 주제와 관련된 Xamarin Lightning 강의 중 하나 덕분에 조금 더 발전했습니다. https://university.xamarin.com/lightninglectures/ios-bindings-in-cc

가 여기에 지금까지 한 일이다 : 나는이 자습서를 다음 봤는데

1) 나는 3 개 기능을 가진 간단한 C 파일 "example.c"이 있습니다 addOne (INT의 N)를,

2) 튜토리얼에서 볼 수 있듯이 SWIG를 사용하여 C 래퍼 클래스 (예 : C# 래퍼 클래스와 함께) 인 "example_wrap.c"를 만들었습니다.

3) Xcode에서 정적 라이브러리를 만들고 모든 아키텍처 (libs 결합에 사용되는 lipo)로 FAT 바이너리를 작성했습니다.

이 자습서에서는 C# 래퍼 클래스와 하나의보기 iOS 응용 프로그램과 함께 2 개의 프로젝트를 만드는 방법에 대해 설명합니다. iOS 프로젝트에는 libexample.a 정적 라이브러리 (BundledResource)가 있습니다. iOS 앱을 만들 때까지 모든 것이 잘 진행되고있었습니다. iOS 앱을 컴파일 할 수 없습니다. 문제를 격리하기 위해 정적 라이브러리에 대한 호출을 제거했습니다. 이제 컴파일하고 올바르게 연결하려고합니다. 이제 모든 것은 정적 라이브러리가 번들 된 빈 iOS 앱일뿐입니다. 하지만 여전히 문제가 있습니다.

나는하여 엠 터치 인수에 추가 된 다음 한 : 컴파일 할 때

, 내가 얻을 "/libexample.a -L $ {PROJECTDIR} -lexample -force_load $ {PROJECTDIR}" -cxx -gcc_flags 이러한 오류는 :

Undefined symbols for architecture x86_64: 
"subtractOne(int)", referenced from: 
_CSharp_subtractOne in libexample.a(example_wrap.o) 
"addOne(int)", referenced from: 
_CSharp_addOne in libexample.a(example_wrap.o) 
"get_time()", referenced from: 
_CSharp_get_time in libexample.a(example_wrap.o) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

내가 두 번 명령 줄에서 "나노 -arch x86_64에 libexample.a"를 실행하여 libexample.a 파일의 기호를 확인. 해당 아키텍처에 대한 모든 기호가 나열된 것 같습니다. 여기

내 libexample.a와 C 파일과 압축 파일에 대한 링크입니다 :이 단지 구성 오류 확신 https://drive.google.com/open?id=0B2WtJ38rvldKYmlZckU3QjNBeUE

하지만 난 내가 잘못거야 어디에서 찾아 낼 수없는 것 .

감사합니다.

+0

** C++ 래퍼를 만들 때'CppSharp'를 사용합니다 : https://github.com/mono/CppSharp – SushiHangover

+0

정보 주셔서 감사합니다. 그러나이 정적 라이브러리를 가져 오는 방법을 찾고있었습니다. Xamarin으로. 나는 Objective C wrapper를 써야 할 필요가 있다고 들었고 누군가 비슷한 것을했는지 궁금해했다. – paradox

+0

? 나는 COSSharp를 사용하여 iOS/Android 네이티브 C++ 라이브러리를 Xamarin.iOS와 Xamarin.Android로 가져옵니다. 가다. 물론 이것은 각 플랫폼마다 반복되어야합니다 ...개인적으로 나는 그것이 더 많은 작업이라는 것을 알았고, 그것은 실행 되어야만하는 또 다른 코드 레이어이며 또한 C++ lib의 모든 변경 사항에 sync'd되어야합니다. – SushiHangover

답변

1

나는 Xamarin 지원에서 약간의 도움을 얻은 후에 정적 라이브러리를 작성한 방법을 뒤죽박죽으로 본 것처럼 보입니다. 파일이 'C'로 컴파일되었는지 확인해야했습니다. '파일 대신 C++. 정적 라이브러리를 올바르게 생성 한 후 컴파일러는 누락 된 심볼을 인식 할 수있었습니다.

관련 문제