Ran into android build error on my Ubuntu 14.04.
I have tried with pre-installed sdk and without sdk. Installed NDK too. It was like Gregg mentioned, env variable does not work properly, have to assign with command line. And also ndk r11c will produce an error saying that wchar.h no such file. After switching to r10 that error is gone. From: iotivity-dev-bounces at lists.iotivity.org [mailto:[email protected]] On Behalf Of Gregg Reynolds Sent: Tuesday, May 31, 2016 11:31 PM To: iotivity-dev at lists.iotivity.org Subject: Re: [dev] android/osx build On Tue, May 31, 2016 at 7:29 AM, Gregg Reynolds <dev at mobileink.com> wrote: Hi, Trying to target android from OS X I get the following error: Ok, I got it to work. For the record: First edit resource/c_common/platform_features.h and change <stdassert.h> to <assert.h> Putting ANDROID_HOME in the env does not seem to work, you have to put it on the command line (see below). Darwin NDK: 1. cd extlibs/android/ndk 2. $ wget http://dl.google.com/android/ndk/android-ndk-r10d-darwin-x86_64.bin 1. $ chmod ug+x android-ndk-r10d-darwin-x86_64.bin 2. ./android-ndk-r10d-darwin-x86_64.bin Android SDK: if you don't already have it installed the build will prompt you. If you do have it installed, then export ANDROID_HOME=your/install/dir. Then check that you have the right versions: 1. $ANDROID_HOME/build-tools/20.0.0 - previously this was "android-4.4W", but the build system assumes it is "20.0.0". You can rename it, or run the SDK manager, delete it, and reinstall it 2. $ANDROID_HOME/platforms/android-21 BOOST: The build system only supports Linux at the moment, and extlibs/boost/SConscript throws an error if host_os is other than "linux2". After lots of trial and error I discovered the fix is very simple: if host_os == 'linux2' : boost_bootstrap = boost_base_name+os.sep+'bootstrap.sh' # BEGIN INSERT else : if host_os == 'darwin' : boost_bootstrap = '' # END INSERT else: msg="Host platform (%s) is currently not supported for boost builds" % host_os raise SCons.Errors.EnvironmentError(msg) Originally I tried setting boost_bootstrap = boost_base_name+os.sep+'bootstrap.sh' for darwin, but that does not work, as extlibs/boost/boost_1_58_0/bootstrap.sh generates site-config.jam, which sets target to darwin, overriding extlibs/boost/boost_1_58_0/tools/build/src/user-config.jam. The latter is generated by iotivity/tools/scons/BoostBuild.py, and sets up cross-compilation. bootstrap.sh is generated by tools/scons/BoostBootstrap.py, which is why we skip it. With target=darwin boost gets built, but the architecture is wrong so you'll end up with something like "ld: error: boost_thread: no archive symbol table (run ranlib)". If you want to see the build commands for boost, add "cmd.append('--debug-configuration')" to tools/scons/BoostBuild.py in the appropriate place. Maybe there's a better way to do this from the command line, but I'm a scons/boost neophyte and don't know a whole lot of Python. Also, the automatic download of boost did not work so I took the easy way out and used wget to fetch it and unzipped it in extlibs/boost. Now the build works (OS X 10.11.5, Java v. 1.8.0_91): $ scons SYS_VERSION=10.11 VERBOSE=true TARGET_OS=android TARGET_ARCH=x86 ANDROID_HOME=/Users/gar/android/sdk Unfortunately, that's only for x86, which does not work on my mobile, so I have not yet tested the output example apps. But they do build! The arm architectures do not work yet, I think the Boost build files need some work. I'll try to get it working today or tomorrow. Also, the generic-java branch with Petre Eftime's fixes does not yet build on OS X. I'm working on it. Hope that helps. If I can find some time I'll write up a proper blog post on it. I'd also be happy to work with the Android buildmeister on getting this into the codebase. -Gregg scons SYS_VERSION=10.11 VERBOSE=true TARGET_OS=android ANDROID_HOME=/Users/gar/android/sdk ... /Users/gar/iotivity/iotivity/extlibs/android/ndk/android-ndk-r10d/toolchains/x86-4.8/prebuilt/darwin-x86_64/bin/i686-linux-android-g++ -o out/android/x86/release/resource/src/liboc.so -Wl,--gc-sections -Wl,-z,nocopyreloc --sysroot=/Users/gar/iotivity/iotivity/extlibs/android/ndk/android-ndk-r10d/platforms/android-21/arch-x86 -no-canonical-prefixes -Wl,-z,noexecstack -Wl,--no-undefined -Wl,-z,relro -Wl,-z,now -s -Wl,-soname,liboc.so -shared out/android/x86/release/resource/src/OCPlatform.os out/android/x86/release/resource/src/OCPlatform_impl.os out/android/x86/release/resource/src/OCResource.os out/android/x86/release/resource/src/OCUtilities.os out/android/x86/release/resource/src/OCException.os out/android/x86/release/resource/src/OCRepresentation.os out/android/x86/release/resource/src/InProcServerWrapper.os out/android/x86/release/resource/src/InProcClientWrapper.os out/android/x86/release/resource/src/OCResourceRequest.os out/android/x86/release/resource/src/CAManager.os -Ldeps/android/lib/x86 -Lextlibs/android/ndk/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.8/libs/x86 -Ldep/android/x86/usr/lib -Lout/android/x86/release -L. -Lresource/csdk/connectivity/lib/android -Lout/android/x86/release/resource/csdk/logger -Lresource/csdk/logger -Lout/android/x86/release/resource/c_common -Lresource/c_common -Lout/android/x86/release/resource/csdk/routing -Lresource/csdk/routing -lc_common -llogger -llog -lcoap -lc_compat -landroid_cpp11_compat -lroutingmanager -loctbstack -loc_logger -lconnectivity_abstraction -lboost_thread -lgnustl_shared /Users/gar/iotivity/iotivity/extlibs/android/ndk/android-ndk-r10d/toolchains/x86-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/i686-linux-android/4.8/../../../../i686-linux-android/bin/ld: error: boost_thread: no archive symbol table (run ranlib) Based on some stuff I found googling I thought setting env var $AR to the ndk's i686-linux-android-ar might do the trick but it seemed to have no effect. Or maybe it's my boost build. I just download boost to extlibs/boost and unzipped it. Then at build time I see: bootstrapping using [extlibs/boost/boost_1_58_0.zip] ... building boost from [extlibs/boost/boost_1_58_0/b2] for ... Performing configuration checks - 32-bit : no (cached) - 64-bit : yes (cached) - arm : no (cached) - mips1 : no (cached) - power : no (cached) - sparc : no (cached) - x86 : yes (cached) - lockfree boost::atomic_flag : yes (cached) Component configuration: - atomic : not building - chrono : not building - container : not building - context : not building - coroutine : not building - date_time : building - exception : not building - filesystem : not building - graph : not building - graph_parallel : not building - iostreams : not building - locale : not building - log : not building - math : not building - mpi : not building - program_options : building - python : not building - random : not building - regex : not building - serialization : not building - signals : not building - system : building - test : not building - thread : building - timer : not building - wave : not building ...patience... ...patience... ...found 23636 targets... ...updating 5 targets... common.copy /Users/gar/iotivity/iotivity/dep/android/x86/usr/include/boost/config.hpp common.copy /Users/gar/iotivity/iotivity/dep/android/x86/usr/include/boost/date_time.hpp common.copy /Users/gar/iotivity/iotivity/dep/android/x86/usr/include/boost/program_options.hpp common.copy /Users/gar/iotivity/iotivity/dep/android/x86/usr/include/boost/thread.hpp common.copy /Users/gar/iotivity/iotivity/dep/android/x86/usr/include/boost/variant.hpp ...updated 5 targets... Does that look right? Anybody know what I need to do here to get unstuck? Thanks, Gregg -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.iotivity.org/pipermail/iotivity-dev/attachments/20160615/7a432da2/attachment.html>
