[cmake-developers] cmake's built-in support for android using nvidia nsight tegra

Peter List pem.list at gmail.com
Tue Aug 25 01:57:29 EDT 2015


I'm now attempting to build a simple SDL2 Android application with CMake's
built-in Android support (uses nvidia tegra nsight for visual studio 2010)

SDL2-2.0.3 does not appear to have a NativeActivity example so I'm
attempting to use its android-project folder that includes
"SDL2-2.0.3\android-project\src\org\libsdl\app\SDLActivity.java" instead.

I'm able to compile my libpemDemos.so project with SDL2 code this way for
armabi-v7a

I also compiled libSDL2.so for armabi-v7a using ndk-build (not nvidia tegra
nsight), and I'm able to reference it from my pemDemos.vcxproj

I verified my pemDemos.vcxproj linker step does includes this:
-L"[path]/SDL2-2.0.3/libs/armeabi-v7a" "-lSDL2"

However, I'm getting a linker error when I try to add SDL_android_main.c to
my build:

1>  pemDemos.dir/Debug/SDL_android_main.o: In function
`Java_org_libsdl_app_SDLActivity_nativeInit(_JNIEnv*, _jclass*, _jobject*)':
1>  [path]\SDL2-2.0.3\src\main\android\SDL_android_main.c(23):  undefined
reference to `SDL_Android_Init(_JNIEnv*, _jclass*)'
1>collect2.exe : error : ld returned 1 exit status

If I comment out the following one line then I can build my libpemDemos.so
again:

SDL_Android_Init(env, cls);

However that of course fails when I try to run it.

I don't understand why the linker doesn't see `SDL_Android_Init(_JNIEnv*,
_jclass*)'.  I have "-lSDL2" (and I know the linker is finding libSDL.so
because it gives an error if I change vcxproj settings to do "-lSDLzzz"
instead of "-lSDL").  Plus I even verified that libSDL2.so has
SDL_Android_Init():

>readelf -Ws [path]\SDL2-2.0.3\libs\armeabi-v7a\libSDL2.so | grep
SDL_Android_Init
   216: 0002f60d   332 FUNC    GLOBAL DEFAULT    8 SDL_Android_Init

So why doesn't my linker step find SDL_Android_Init()?

thank you for any leads




On Mon, Aug 24, 2015 at 8:20 PM, Peter List <pem.list at gmail.com> wrote:

> Per Brad's suggestion, I removed this line from my CMakeLists.txt:
>
> add_library(${PROJECT_NAME} SHARED ${SRC_LIST})
>
> And I added these lines:
>
> set(CMAKE_ANDROID_GUI TRUE)
> set(CMAKE_ANDROID_API 19) # Kindle Fire HD 6
> set(CMAKE_ANDROID_API_MIN 19) # Kindle Fire HD 6
> add_executable(${PROJECT_NAME} ${SRC_LIST})
>
> I am now able to generate a Visual Studio 2010 pemDemos.sln that includes
> a pemDemos.vcxproj with a configuration properties section "Ant Built".
> From inside Visual Studio, I'm able to build an APK and then ctrl+F5 to run
> it on my device.
>
> Unfortunately, cmake did not generate AndroidManifest.xml, so I had to
> supply my own using the aforementioned execute_process() with android.bat.
>
> At this point my app just displays a "Hello World, PemActivity" message
> that it gets from "build-android\android\res\layout\main.xml".  So it's not
> using "android_native_app_glue.c,h" to point to my "main.cpp" code in
> "libpemDemos.so" yet.  So maybe cmake doesn't do that part automatically
> for me?  I also don't see a tutorial or simple hello world demo project for
> this...  However, I can at least use AndroidNativeApp.vcxproj as a
> reference.
>
> thank you & best regards
>
>
>
>
>
>
>
>
>
>
>
> On Mon, Aug 24, 2015 at 9:49 AM, Brad King <brad.king at kitware.com> wrote:
>
>> On 08/23/2015 04:44 PM, Peter List wrote:
>> > How do I tell cmake to include "Ant Build" in my vcxproj, so that
>> > it will package my project into an APK?  I can generate vcxproj
>> > that builds a Tegra-Android *.so file, but it does not build me
>> > an APK, and my vcxproj is missing the "Ant Build" property section.
>>
>> You need to set the ANDROID_GUI target property on an exe:
>>
>>  http://www.cmake.org/cmake/help/v3.3/prop_tgt/ANDROID_GUI.html
>>
>> Additional settings have been added in post-3.3 development:
>>
>>  VS: Add more Nsight Tegra generator Android property settings
>>  http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=8c0afaf4
>>
>> -Brad
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20150825/a50f08ec/attachment-0001.html>


More information about the cmake-developers mailing list