2013-01-09 2 views
1

monomac에 CorePlot 0.9 바인딩을 사용하려고 시도하고 있지만 어려운 작업 인 것 같습니다. 모노 터치 샘플은 아무런 문제없이 빌드되어 실행되지만, 필자는 그럴 필요가 없습니다.CorePlot MonoMac bindings가 충돌 함

바인딩에 CorePlotiOS.dll 만 있었기 때문에 osx 용으로 빌드해야했지만 af 맨 처음에는 bmake.exe가 없었기 때문에 monomac 소스를 다운로드하고 직접 빌드해야했습니다. 먼저. 그런 다음 CorePlotOSX.dll을 빌드하려고했지만 컴파일 문제가 발생했습니다. 모노 터치 용 빌드 스크립트를 보면 다음과 같이이 라인을 대신 사용해 보았습니다.

MONO_PATH=$(MONOMAC)/src mono $(MONOMAC)/src/bmac.exe -e -unsafe coreplot.cs -s=enums.cs -x=extras.cs -x=AssemblyInfo.cs --sourceonly=list --tmpdir=osx -r:System.Drawing -r:MonoMac -lib:$(MONOMAC)/src -baselib:$(MONOMAC)/src/MonoMac.dll . 

거기에 아무 문제가 없습니까?

graph = new CPTPieChart(); 
graph.Title = "Test"; 

할당 살아남을 것 같다,하지만 난 개체에 액세스하는 데, 나는 충돌을 시도 할 때마다 :

나는 이것에 문제를 감소

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000bf887fac 

VM Regions Near 0xbf887fac: 
    Stack     00000000b038d000-00000000b040e000 [ 516K] rw-/rwx SM=COW 
--> Stack     00000000bc088000-00000000bf888000 [ 56.0M] ---/rwx SM=NUL 
    Stack     00000000bf888000-00000000c0088000 [ 8192K] rw-/rwx SM=COW 

Application Specific Information: 
objc[17645]: garbage collection is OFF 

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 
0 com.apple.CoreFoundation  0x97c8aebc __CFStringEncodeByteStream + 12 
1 com.apple.Foundation   0x9ac8ed49 -[NSString(NSStringOtherEncodings) getBytes:maxLength:usedLength:encoding:options:range:remainingRange:] + 263 
2 com.apple.Foundation   0x9ac8e8ee bytesInEncoding + 213 
3 com.apple.Foundation   0x9ac8e814 -[NSString(NSStringOtherEncodings) UTF8String] + 42 
4 com.apple.CoreFoundation  0x97ce478c -[__NSCFString UTF8String] + 204 
5 ???        0x00f91208 0 + 16323080 
6 ???        0x030d708c 0 + 51212428 
7 ???        0x030d703c 0 + 51212348 
8 ???        0x016877d4 0 + 23623636 

어떤 아이디어가? Mac OSX 10.7.5 btw를 실행 중입니다.

답변

2

좋습니다. xcode와 monomac과 싸우고 며칠 후, 네이티브 CorePlot 프레임 워크 (동적 lib)가로드되지 않았다는 것이 밝혀졌습니다. 나는 그것을 스스로로드해야한다는 것을 알지 못했다. (나는 모노맥 초보자이다. 미안하지만, 오히려 추한 것은 아니다.)

두 가지 방법이있다. 하나

Dlfcn.dlopen ("CorePlot.framework/CorePlot", 2); // 2 = load now, 0 = lazy load 

또는 [assembly:MonoMac.RequiredFramework("CorePlot.framework/CorePlot")]