2014-07-25 5 views
3

xcode에 flacios library을 컴파일했습니다. 그런 다음 프레임 워크 폴더 (이 특정 xcode 프로젝트의 유물 빌드)에서 "팻 바이너리"를 추출하여 libFLACiOS.a로 이름을 변경했습니다.MonoTouch 프로젝트에서 네이티브 라이브러리를 연결할 수 없습니다. -lName에 대한 라이브러리를 찾을 수 없습니다.

그런 다음 MonoTouch 앱 프로젝트에 추가했습니다. 내가 사용해야 및 옵션 프로젝트에 gcc가 플래그를 추가 한 네이티브 메소드 수입 오전 NativeMethods 래퍼 클래스 생성 : 지금

-cxx -gcc_flags "-std=c++11 -stdlib=libc++ -lc++ -v -Wall -L${ProjectDir} -lFLACiOS -framework AVFoundation -force_load ${ProjectDir}/libFLACiOS.a

을 내가 가져 오기 작업에 필요한 모든 일을 한 것 같아, 내가 다음 빌드 오류를 얻을 프로젝트를 빌드 할 때 :

/Developer/MonoTouch/usr/bin/mtouch -sdkroot "/Applications/Xcode.app/Contents/Developer" --cache "/Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache" --nomanifest --nosign -dev "/Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/bin/iPhone/Debug/Sigmo.app" -r "/Developer/MonoTouch/usr/lib/mono/2.1/System.dll" -r "/Developer/MonoTouch/usr/lib/mono/2.1/System.Xml.dll" -r "/Developer/MonoTouch/usr/lib/mono/2.1/System.Core.dll" -r "/Developer/MonoTouch/usr/lib/mono/2.1/monotouch.dll" -debug -linksdkonly -sdk "7.1" -targetver "7.0" --abi=armv7 "-cxx" --gcc_flags "\"-std=c++11\" \"-stdlib=libc++\" \"-lc++\" \"-v\" \"-Wall\" \"-L/Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo\" \"-lFLACiOS\" \"-framework\" \"AVFoundation\" \"-force_load\" \"/Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/libFLACiOS.a\"" "/Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/bin/iPhone/Debug/Sigmo.exe" 
Xamarin.iOS 7.2.5 Trial Edition using framework: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk 
Process exited with code 1, command: 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -Wl,-pie -miphoneos-version-min=7.0 -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/Sigmo.exe.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/monotouch.dll.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/mscorlib.dll.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/System.dll.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/System.Core.dll.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/registrar.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/main.armv7.o -o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/bin/iPhone/Debug/Sigmo.app/Sigmo -framework CFNetwork -framework AVFoundation -framework QuartzCore -framework CoreBluetooth -framework Foundation -framework AudioToolbox -framework CoreGraphics -framework UIKit -lz -liconv -u _mono_pmip -u _monotouch_release_managed_ref -u _monotouch_create_managed_ref -u _xamarin_get_block_descriptor -u _monotouch_IntPtr_objc_msgSend_IntPtr -u _monotouch_log /Developer/MonoTouch/SDKs/MonoTouch.iphoneos.sdk/usr/lib/libmonoboehm-2.0.a /Developer/MonoTouch/SDKs/MonoTouch.iphoneos.sdk/usr/lib/libmonotouch-debug.a "-std=c++11" "-stdlib=libc++" "-lc++" "-v" "-Wall" "-L/Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo" "-lFLACiOS" "-framework" "AVFoundation" "-force_load" "/Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/libFLACiOS.a" 
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn) 
Target: arm-apple-darwin13.3.0 
Thread model: posix 
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -dynamic -arch armv7 -force_load /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/libFLACiOS.a -iphoneos_version_min 7.0.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk -u _mono_pmip -u _monotouch_release_managed_ref -u _monotouch_create_managed_ref -u _xamarin_get_block_descriptor -u _monotouch_IntPtr_objc_msgSend_IntPtr -u _monotouch_log -o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/bin/iPhone/Debug/Sigmo.app/Sigmo -L/Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo -pie /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/Sigmo.exe.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/monotouch.dll.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/mscorlib.dll.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/System.dll.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/System.Core.dll.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/registrar.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/main.armv7.o -framework CFNetwork -framework AVFoundation -framework QuartzCore -framework CoreBluetooth -framework Foundation -framework AudioToolbox -framework CoreGraphics -framework UIKit -lz -liconv /Developer/MonoTouch/SDKs/MonoTouch.iphoneos.sdk/usr/lib/libmonoboehm-2.0.a /Developer/MonoTouch/SDKs/MonoTouch.iphoneos.sdk/usr/lib/libmonotouch-debug.a -lc++ -lFLACiOS -framework AVFoundation -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.1/lib/darwin/libclang_rt.ios.a 
Undefined symbols for architecture armv7: 
    "std::string::c_str() const", referenced from: 
     FLAC::Decoder::File::init(std::string const&) in libFLACiOS.a(stream_decoder-823A661D997F1576.o) 
     FLAC::Decoder::File::init_ogg(std::string const&) in libFLACiOS.a(stream_decoder-823A661D997F1576.o) 
     FLAC::Encoder::File::init(std::string const&) in libFLACiOS.a(stream_encoder-20FCC1D902B5C661.o) 
     FLAC::Encoder::File::init_ogg(std::string const&) in libFLACiOS.a(stream_encoder-20FCC1D902B5C661.o) 
ld: symbol(s) not found for architecture armv7 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

error MT5309: Native linking error: Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn) 
error MT5309: Native linking error: Target: arm-apple-darwin13.3.0 
error MT5309: Native linking error: Thread model: posix 
error MT5309: Native linking error: "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -dynamic -arch armv7 -force_load /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/libFLACiOS.a -iphoneos_version_min 7.0.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk -u _mono_pmip -u _monotouch_release_managed_ref -u _monotouch_create_managed_ref -u _xamarin_get_block_descriptor -u _monotouch_IntPtr_objc_msgSend_IntPtr -u _monotouch_log -o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/bin/iPhone/Debug/Sigmo.app/Sigmo -L/Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo -pie /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/Sigmo.exe.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/monotouch.dll.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/mscorlib.dll.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/System.dll.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/System.Core.dll.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/registrar.armv7.o /Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/obj/iPhone/Debug/mtouch-cache/main.armv7.o -framework CFNetwork -framework AVFoundation -framework QuartzCore -framework CoreBluetooth -framework Foundation -framework AudioToolbox -framework CoreGraphics -framework UIKit -lz -liconv /Developer/MonoTouch/SDKs/MonoTouch.iphoneos.sdk/usr/lib/libmonoboehm-2.0.a /Developer/MonoTouch/SDKs/MonoTouch.iphoneos.sdk/usr/lib/libmonotouch-debug.a -lc++ -lFLACiOS -framework AVFoundation -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.1/lib/darwin/libclang_rt.ios.a 
error MT5210: Native linking failed, undefined symbol: std::string::c_str() const. Please verify that all the necessary frameworks have been referenced and native libraries are properly linked in. 
error MT5201: Native linking failed. Please review the build log and the user flags provided to gcc: "-std=c++11" "-stdlib=libc++" "-lc++" "-v" "-Wall" "-L/Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo" "-lFLACiOS" "-framework" "AVFoundation" "-force_load" "/Users/maxpavlov/Perforce/max.pavlov_Moment_5440/Mobile/Sigmo/SigmoIOS/Sigmo/libFLACiOS.a" 
error MT5202: Native linking failed. Please review the build log. 

답변

0

그것은 당신이 때문에 -lFLAC의, FLAC.a을 연결하는 기본 링커를 말하고있는 것처럼 보인다.

그러나 다른 파일 이름 인 FLACiOS.a이 있다고하셨습니다. 이 값을 일치하도록 변경 했습니까? 예 : -lFLACiOS?

+0

감사합니다. 나는 -l 매개 변수에 .a 확장자가없는 라이브러리 이름이 있어야한다는 것을 알지 못했습니다. 그러나 gcc 플래그를 -lFLACiOS로 변경해도 아무 것도 변경되지 않습니다. 여전히 동일한 오류 메시지가 나타납니다. -lFLACiOS를 사용해도 오류 메시지가 어떻게 나타나는지 보여주기 위해 오류 메시지를 업데이트했습니다. –

+0

실제로 Xamarin은 기본적으로 -l lib를 어떻게 호출하든 관계가 없다고 설명합니다. 예제에서 gcc 매개 변수는'-gcc_flags "-L $ {ProjectDir} -lMylibrary -force_load $ {ProjectDir} /libMyLibrary.a"이며 MyLibrary는 libMyLibrary가 아닙니다. –

+0

그건 의사가 말한 내용이 아닙니다 ;-)'lib' 접두어는 함축되어 있지만 IIRC는 필요하지 않습니다 (100 % 확실하게 이름을 바꿀 수도 있습니다). – poupou

관련 문제