> On 2019-01-11, at 16:27, Ryan Schmidt <[email protected]> wrote:
>
> To cross-compile for iOS, you would presumably need to tell the build system
> what architecture(s) to build for and what SDK to use. Often, that can be
> done by adding the right -arch flags to the CFLAGS, CXXFLAGS, OBJCFLAGS,
> OBJCXXFLAGS, and LDFLAGS environment variables, and adding the right
> -syslibroot flag (pointing to the iOS SDK you want to use) to the CFLAGS,
> CXXFLAGS, OBJCFLAGS, and OBJCXXFLAGS variables, and adding the right
> -Wl,-syslibroot, flag (pointing to the right iOS SDK) to the LDFLAGS.
On current macOS and Xcode, this is done like so:
env CC=clang CFLAGS='-isysroot
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.1.sdk
-target arm-apple-darwin -arch arm64' ./configure --build=x86_64-apple-darwin
--host=arm-apple-darwin
make
You'll see the dylib file has aarch64 architecture:
$ file ./artnet/.libs/libartnet.1.dylib
./artnet/.libs/libartnet.1.dylib: Mach-O 64-bit arm64 dynamically linked shared
library, flags:<|DYLDLINK|NO_REEXPORTED_DYLIBS>
But this only builds a library (dylib) and on iOS you don't directly load
libraries. With the given output from libarinet, if you want it as a separate
library, you have to make a framework and bundle that with your app (allowed
since iOS 8).
Any binaries compiled this way will only work on a jailbroken due to lack of
code signing.
--
Andrew