-
Notifications
You must be signed in to change notification settings - Fork 84
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Issue building android-demo #4
Comments
I dont have computer access today, will look into it tomorrow. It has to just be linked against openmp with the compiler flag -fopenmp |
Yeah the -fopenmp is part of the build command, but still doesn't work: /home/nicholas14/Downloads/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -Wl,-soname,libtorchdemo.so -shared --sysroot=/home/nicholas14/Downloads/android-ndk-r10d/platforms/android-17/arch-arm ./obj/local/armeabi-v7a/objs/torchdemo/torchandroid.o ./obj/local/armeabi-v7a/objs/torchdemo/torchdemo.o ./obj/local/armeabi-v7a/objs/torchdemo/android_fopen.o /home/nicholas14/Downloads/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/thumb/libgnustl_static.a -lgcc -no-canonical-prefixes -march=armv7-a -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -mthumb -fopenmp -L/home/nicholas14/Downloads/android-ndk-r10d/platforms/android-17/arch-arm/usr/lib -llog -landroid -L../lib/ -lgomp -lluaT -ltorch-lua-static -lTH -lnn -ltorch -lnnx -limage -limgraph -lluaT -ltorch-lua-static -lTH -lnn -ltorch -lnnx -limage -limgraph -lc -lm -lgomp -o ./obj/local/armeabi-v7a/libtorchdemo.so
../lib//libnn.a(init.c.o):init.c:function nn_FloatSqrt_updateGradInput: error: undefined reference to 'GOMP_parallel'
../lib//libnn.a(init.c.o):init.c:function nn_FloatSquare_updateGradInput: error: undefined reference to 'GOMP_parallel'
../lib//libnn.a(init.c.o):init.c:function nn_FloatSquare_updateOutput: error: undefined reference to 'GOMP_parallel'
../lib//libnn.a(init.c.o):init.c:function nn_FloatHardTanh_updateGradInput: error: undefined reference to 'GOMP_parallel'
collect2: error: ld returned 1 exit status
|
Which is related to all these lines in the c code of nn's prebuilt static library: #pragma omp parallel for private(k) |
Error happens on both ubuntu 12.04 and 14.04. |
Ok so I was able to build the android-demo but only after disabling OPENMP compilation from torch and nnx. I don't want to submit a PR for my changes because I believe there should be a way to compile the torch and nnx static libraries with the same OpenMP libraries used by the new ndk versions that support it. |
EDIT: Seems I was mistaken: it is simply a linking problem. For some reason the libgomp in the toolchain is not linked during compilation. Copying it from the android toolchain subdirs to ../lib worked for me, adding -lgomp did not. But I don't know enough about android app compilation to come up with the proper fix. That said:
|
@jgemmeke NEON might not compile on armv8, there's some armv7 specific assembly there (wish that my work at @museami would be open-sourced, I rewrote all of it and a faster version for v8 as well). the camera preview-sizes error is an android thing. you must be using some non-standard camera, we wrote these demos targeting most standard phones. |
For your information, you can find this information in this page with click on Android NDK, Revision 10c (October 2014) |
@jgemmeke you can fix that camera-dependent app error with removing some lines in demo code. CameraClass.jave 65th line parameters.setPreviewSize(1280, 768); After commenting this line, preview size remains as your phone's default configuration and it may work. I think that will be nice if there are some resizing step instead of using fixed preview size(1280,768) |
@jgemmeke Tried dropping the static libgomp.a and linking it during the compilation of the android demo, but still get the same errors. What am I missing? My Android.mk file: LOCAL_PATH := $(call my-dir)
LOCAL_CFLAGS += -fopenmp
LOCAL_LDFLAGS += -fopenmp
LOCAL_EXPORT_C_INCLUDES := $(TORCH_ANDROID)/include/torch
LOCAL_MODULE := gomp
LOCAL_SRC_FILES := /home/nicholas14/Downloads/android-ndk-r10d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/arm-linux-androideabi/lib/libgomp.a
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_STATIC_LIBRARIES += gomp
LOCAL_MODULE := torch-lua-static
LOCAL_SRC_FILES := $(TORCH_ANDROID)/lib/libtorch-lua-static.a
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_MODULE := luaT
LOCAL_SRC_FILES := $(TORCH_ANDROID)/lib/libluaT.a
LOCAL_STATIC_LIBRARIES += torch-lua-static
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_MODULE := TH
LOCAL_SRC_FILES := $(TORCH_ANDROID)/lib/libTH.a
LOCAL_STATIC_LIBRARIES += luaT
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_MODULE := torch
LOCAL_SRC_FILES := $(TORCH_ANDROID)/lib/libtorch.a
LOCAL_STATIC_LIBRARIES += TH
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_MODULE := nn
LOCAL_SRC_FILES := $(TORCH_ANDROID)/lib/libnn.a
LOCAL_STATIC_LIBRARIES += torch
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_MODULE := nnx
LOCAL_SRC_FILES := $(TORCH_ANDROID)/lib/libnnx.a
LOCAL_STATIC_LIBRARIES += nn
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_MODULE := image
LOCAL_SRC_FILES := $(TORCH_ANDROID)/lib/libimage.a
LOCAL_STATIC_LIBRARIES += nnx
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_MODULE := imgraph
LOCAL_SRC_FILES := $(TORCH_ANDROID)/lib/libimgraph.a
LOCAL_STATIC_LIBRARIES += image
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_STATIC_LIBRARIES += imgraph
LOCAL_MODULE := torchdemo
LOCAL_C_INCLUDES += $(TORCH_ANDROID)/include/torch
LOCAL_SRC_FILES := torchandroid.cpp torchdemo.cpp android_fopen.c
LOCAL_LDLIBS := -llog -landroid
include $(BUILD_SHARED_LIBRARY) |
I made a little test to see if I could compile a part of the android-demo with openmp support. In torchandroid.cpp, I added: #include <omp.h>
...
lua_State* inittorch(AAssetManager* manager) {
...
char buffer[4096]; // buffer for textview output
#pragma omp parallel for
for(int i = 0;i < 100;i++) {
/* Do work... */
buffer[i] = 'd';
}
return L;
} It compiled with the build command issued by ndk-build: /home/nicholas14/Downloads/android-ndk-r10d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -MMD -MP -MF ./obj/local/armeabi-v7a/objs/torchdemo/torchandroid.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -no-canonical-prefixes -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -fno-exceptions -fno-rtti -mthumb -Os -g -DNDEBUG -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -I/home/nicholas14/projects/torch-android//include/torch -I/home/nicholas14/projects/torch-android//include/torch -I/home/nicholas14/projects/torch-android//include/torch -I/home/nicholas14/projects/torch-android//include/torch -I/home/nicholas14/projects/torch-android//include/torch -I/home/nicholas14/projects/torch-android//include/torch -I/home/nicholas14/projects/torch-android//include/torch -I/home/nicholas14/projects/torch-android//include/torch -I/home/nicholas14/projects/torch-android//include/torch -I/home/nicholas14/Downloads/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.8/include -I/home/nicholas14/Downloads/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a/include -I/home/nicholas14/Downloads/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.8/include/backward -Ijni -DANDROID -fopenmp -Wa,--noexecstack -Wformat -Werror=format-security -fopenmp -I/home/nicholas14/Downloads/android-ndk-r10d/platforms/android-17/arch-arm/usr/include -c jni/torchandroid.cpp -o ./obj/local/armeabi-v7a/objs/torchdemo/torchandroid.o So that would seem to indicate that the issue lies in how we compile torch-android, and not the android-demo... |
Literally the only thing I need to do to get the demos compiled (just tested with fresh git clone of the repo) cp ~/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/lib/libgomp.a lib/ I welcome understanding why this works for me, and what the proper way to do it is :) |
Forgot (to mention) I overwrote my libgomp files with the ones posted in the comments in this thread: http://recursify.com/blog/2013/08/09/openmp-on-android-tls-workaround Which probably makes the difference. |
Yeah also tried that. It works for me now thanks to your comment. Actually reverted to the old style Android.mk as the one I posted above, although it fixes an ndk-build warning, sucks. Tomorrow will try to compile on my buddy's computer to confirm what steps are actually necessary. I also made some changes to the torch-android build.sh. |
The key was in fact changing the cmake command in the torch-android build.sh to: cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/android.toolchain.cmake .. -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR -DANDROID_STL=none -DCMAKE_BUILD_TYPE=Release -DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-4.8 -DANDROID_NO_UNDEFINED=ON No need to drop the libgomp.a. |
oh! nice. can you PR? let me just add you to the repo |
hi @nicholas-leonard , i get the same error. After build using sh build.sh in torch-android-master i copy manually the libraries ( found using in the shell "$find . -name *.a") inside the folder /torch-android-master/lib. I enter in android-demo folder and launching "$sh build.sh" (or using ndk-build comand after adding ndk-build at the enviroment varibles) I get: alfonso@alfonso-Precision-T1700:~/AndroidStudioProjects/torch-android-master/android-demo$ sh build.sh define D(x...) __android_log_print(ANDROID_LOG_INFO,"torchdemo", "%s", x)
jni/torchdemo.cpp:35:7: note: in expansion of macro 'D' I tried to change the cmake command in the torch-android build.sh to: cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/android.toolchain.cmake .. -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR -DANDROID_STL=none -DCMAKE_BUILD_TYPE=Release -DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-4.8 -DANDROID_NO_UNDEFINED=ON I am usuing ubuntu 15.04 64bit Thanks in advance |
@alfo888 Haven't touched this in a while. You might want to try a different NDK version. gcc/g++ 4.9 might also do the trick. The solution seems to be different for every OS. |
Hi soumith,
So I was able to build using the first build.sh. Then I manually copied the static .a libs to the lib folder. But then when I get to compiling the android-demo using that build.sh, I get the following error:
The text was updated successfully, but these errors were encountered: