Xamarin cannot compile native code

I'm trying to use the Good Dynamics SDK in Xamarin, I don't know Objective-C well, so I'm a little lost here. This is an attempt to prove the concept, I'm not sure if this is really doable.

I added the GD file as GD.a from the GD.framework directory and tried to implement the API binding and duplicate the application startup logic from the Xcode project example.

I managed to create it even if Mono Develop displays everything starting with ApiDefinition in red.

When creating, this is part of the error log. Full version here

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc -Wl,-no_pie -arch i386 -gdwarf-2 -fobjc-legacy-dispatch -fobjc-abi-version=2 -miphoneos-version-min=6.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk /var/folders/1t/cbdvyj0x4n35m7674l7wvyjc0000gn/T/tmp6df5493a.tmp/main.x86.o -o /var/folders/1t/cbdvyj0x4n35m7674l7wvyjc0000gn/T/tmp6df5493a.tmp/GDTest -framework CFNetwork -framework Foundation -framework GameKit -framework MapKit -framework MediaPlayer -framework MessageUI -framework OpenGLES -framework StoreKit -framework UIKit -framework AddressBookUI -framework SystemConfiguration -framework AddressBook -framework AudioToolbox -framework AVFoundation -framework QuartzCore -framework CoreGraphics -framework CoreLocation -framework MobileCoreServices -framework Security -framework CoreData -framework ExternalAccessory -weak_framework AssetsLibrary -weak_framework Accounts -weak_framework CoreBluetooth -weak_framework CoreTelephony -weak_framework EventKit -weak_framework EventKitUI -weak_framework CoreMotion -weak_framework GLKit -weak_framework iAd -weak_framework NewsstandKit -weak_framework Social -weak_framework Twitter -weak_framework PassKit -weak_framework CoreImage -weak_framework CoreText -weak_framework ImageIO -weak_framework CoreMedia -weak_framework CoreMIDI -weak_framework CoreVideo -weak_framework AdSupport -weak_framework QuickLook -lz -u _mono_pmip -u _CreateZStream -u _CloseZStream -u _Flush -u _ReadZStream -u _WriteZStream -liconv -lmono-2.0 -lmonotouch -L/Developer/MonoTouch/SDKs/MonoTouch.iphonesimulator.sdk/usr/lib -u _catch_exception_raise -force_load /var/folders/1t/cbdvyj0x4n35m7674l7wvyjc0000gn/T/tmp6df5493a.tmp/GD.a Undefined symbols for architecture i386: "std::basic_istream<char, std::char_traits<char> >::gcount() const", referenced from: GT::AES::decode(std::basic_istream<char, std::char_traits<char> >&, std::basic_ostream<char, std::char_traits<char> >&, unsigned int&, bool)in GD.a(gtaes.o) GT::AES::encode(std::basic_istream<char, std::char_traits<char> >&, std::basic_ostream<char, std::char_traits<char> >&, unsigned int&, bool)in GD.a(gtaes.o) "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::find_first_of(char const*, unsigned long, unsigned long) const", referenced from: -[GDSetPasswordViewController checkPasswordStrength:] in GD.a(GDSetPasswordViewController.o) GD::EacpCReq::EacpCReq(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, GT::Dbb&)in GD.a(GDEacpCommands.o) GD::RawSocket::connect() in GD.a(GDRawSocket.o) "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::copy(char*, unsigned long, unsigned long) const", referenced from: GD::Socket::toString() constin GD.a(GDSocket.o) "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::data() const", referenced from: -[GTContainerDH setRemotePublic521:] in GD.a(GTContainerCrypto.o) -[GTContainerDH initWithP521] in GD.a(GTContainerCrypto.o) -[NSData(GTContainerEncryption) GTEncryptedDataUsingDerivedKey:] in GD.a(GTContainerCrypto.o) -[NSData(GTContainerEncryption) GTDecryptedDataUsingDerivedKey:] in GD.a(GTContainerCrypto.o) -[GTEncryptedFile streamDidReceiveData:] in GD.a(GTEncryptedFile.o) +[NSData(Base64) dataFromBase64String:] in GD.a(NSData+Base64.o) +[GTJsonCommandProcessor parseNSData:] in GD.a(GTICCJsonCommandProcessor.o) ... 

It lasts a lot longer and ends in a mistake.

 ld: symbol(s) not found for architecture i386 collect2: ld returned 1 exit status error MT5202: Native linking failed. Please review the build log. 

Now I'm a little stuck. Any ideas?

thanks

+4
source share
3 answers

I needed to add -cxx to the “Additional mtouch arguments” in the iPhone build settings.

+3
source

The ld message tells you that your static .a library .a does not contain code for i386. This architecture is required to run code on an iOS simulator.

Perhaps the GD package provides different .a for different architectures. In this case, you can use the lipo tool to create a fat library that will contain several architectures.

+4
source

This is an old question, but after many hours we have a complete solution for using Good Dynamics with Xamarin.iOS, written here in detail ... about 5 different workarounds.

http://blog.westmonroepartners.com/using-good-dynamics-sdk-v1-8-x-with-xamarin-ios/

0
source

Source: https://habr.com/ru/post/1440302/


All Articles