After some exploration, I found the problem is because the APP_PLATFORM variable in Application.mk is set to a platform number which is no longer compatible with the Android NDK by the OSG CMake toolchain. This causes the Android to compile it using the most recent Android platform libraries which (for reasons I don't know) no longer provide functions which OSG relies (in particular rand and stat64).
This bug affects the current SVN repos for OSG 3.3.1, OSG 3.3.0, OSG 3.2.1 and OSG 3.2.0 (and possibly earlier).
I posted a longer discussion of what the problem is in this forum thread:
http://forum.openscenegraph.org/viewtopic.php?p=62012#62012
But essentially the fix is to change one line in OSG/PlatformSpecifics/Android/Application.mk.master.in from:
APP_PLATFORM := ${ANDROID_PLATFORM}
To
APP_PLATFORM := android-${ANDROID_PLATFORM}
The attached file will fix the bug in the 3.2.0 - 3.3.1 SVN repos for OSG.
"
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14612 16af8721-9629-0410-8352-f15c8da7e697
android-ndk-r8d/build/gmsl/__
gmsl:512: *** non-numeric second argument to `wordlist' function: ''. Stop.
This is discussed in this thread[1].
The solution is to add <uses-sdk android:minSdkVersion="8" /> to the manifest as the OSG library will only run in devices with Android>=2.2 (Froyo) with API level 8 [2].
The fix does not affect to older sdk's.
Thanks to Jan Ciger for spotting the bug and find a possible solution. "
"- In order to build against GLES1 we execute:
$ mkdir build_android_gles1
$ cd build_android_gles1
$ cmake .. -DOSG_BUILD_PLATFORM_ANDROID=ON -DDYNAMIC_OPENTHREADS=OFF
-DDYNAMIC_OPENSCENEGRAPH=OFF -DANDROID_NDK=<path_to_android_ndk>/
-DOSG_GLES1_AVAILABLE=ON -DOSG_GL1_AVAILABLE=OFF
-DOSG_GL2_AVAILABLE=OFF -DOSG_GL_DISPLAYLISTS_AVAILABLE=OFF -DJ=2
-DOSG_CPP_EXCEPTIONS_AVAILABLE=OFF
$ make
If all is correct you will have and static OSG inside:
build_android_gles1/bin/ndk/local/armeabi.
- GLES2 is not tested/proved, but I think it could be possible build
it with the correct cmake flags.
- The flag -DJ=2 is used to pass to the ndk-build the number of
processors to speed up the building.
- make install is not yet supported."