I have the following situation,
I am porting a piece of an app using OpenSSL for AES encryption, I have everything compile, but the linker fails. The situation is the following:
1. I wrote a JNI wrapper that simply does :
private native String cipherString(String plainData, int datasize, String password, int passSize);
private native String decipherString(String cipheredData, int datasize, String password, int passSize);
next I have a c++ file which I call that has the proper JNI sintax which translates jstring to char * and all other needed transformations, and makes a call to another cpp file which actually imports openssl headers (present and accounted for) and calls openssl methods for ciphering and deciphering.
So when I call ndk-build, it builds all thumbs, so the compiler compiles them correctly.
next i needed to port openssl for android, and I used this OpenSSL for Android
which works like a char with a simple ndk-build (in the root of the project, ofcourse) and builds the libssl.so and libcrypto.so
So I need to connect the two.. I find it a challenge to connect the build scripts, so that one ndk-build compiles and linkes everything (I would appreciate a simple example project if someone has the time for it)
so I copied the compiled libssl and libcrypto .so files in jni/includes/prebuilt and want to include them in the project for the linker to be able to finally create the lib which I will use at the end.
I have the following Android.mk file
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include $(LOCAL_PATH)/includes/build/common.mk
include $(LOCAL_PATH)/includes/build/common_includes.mk
APP_STL := gnustl_static
LOCAL_MODULE := packer
LOCAL_SRC_FILES := modules/cipher/wrapper.cpp \
... #rest of the cpp code
LOCAL_C_INCLUDES += $(LOCAL_PATH)/includes/openssl
LOCAL_SHARED_LIBRARIES := $(LOCAL_PATH)/includes/precompiled/libssl.so \
$(LOCAL_PATH)/includes/precompiled/libcrypto.so
LOCAL_SHARED_MODULES := sslx cryptox
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sslx
LOCAL_SRC_FILES := $(LOCAL_PATH)/includes/precompiled/libssh.so
include $(PREBUILT_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := cryptox
LOCAL_SRC_FILES := $(LOCAL_PATH)/includes/precompiled/libssh.so
include $(PREBUILT_SHARED_LIBRARY)
And when calling ndk-build I get a dissapointing
sslx: LOCAL_SRC_FILES points to a missing file. Check that /home/user/Development/Tools/sdk/android/ndk/build/core//home/user/Development/Tools/sdk/android/ndk/build/core/includes/precompiled/libssh.so exists or that its path is correct. Aborting . Stop.
as you can already guess the path is totally wrong, and what confuses me is that ${LOCAL_PATH} returns correct path for the first batch of includes and a completely wrong one for the .so files ...
Any help would be really appreciated!
Here is the solution, updated to NDK8c
step zero: download and fix the Android NDK
I dunno how but the ndk has a very interesting flaw, which (in my oppinion) doesn't allow you to compile lot's of stuff, so to be able to compile OpenSSL you need to make a small fix, extract the ndk8c whereever you keep your tools, and then edit the file :
android-ndk-r8c/build/gmsl/__gmsl
line 512 :
change line
int_encode = $(__gmsl_tr1)$(wordlist 1,$1,$(__gmsl_input_int))
with line
int_encode = $(__gmsl_tr1)$(wordlist 1,$(words $1),$(__gmsl_input_int))
And you're good to go!
step one : Download OpenSSL and compile for Android :
either compile a ported version found here
or Download the official 1.0.0c version of OpenSSL and then compile it for android using the manual provided in the github I linked for the Android compatible version
So the next step is to get the libssl.so and libcrypto.so
and put the them in the NDK folder for easy access, so copy them from
openssl-folder/libs/armeabi/
to
android-ndk-r8c/platforms/android-8/arch-arm/usr/lib
this way when compiling you can include the libs using a simple linker switch -lssl -lcrypto
Step two : get Curl's latest source for here
Open the file in Docs/INSTALL and follow the steps needed to make the standalone toolchain and put in your desired folder, and then the tricky part, I needed to have android's source code for the config to continue, even though I have a standalone compiled openssl you can include the header files from there too, in anycase this is the more complicated version so you choose what you do, I did not choose to evade them so you can go to Google AOSP site and go trough the steps to build and initialize the environment.
so it would be something like :
1.download,
go to root of the source code and run :
~: build/envsetup.sh; lunch 1; make;
So finally we need to compile curl with SSL support, so,
Step three
extract curl to the desired folder
(I have a specific desire of disabling everything except http/s to keep the library as small as possible meaning about ~300k, if you want more protocols in your lib, remove the --disable-protocol for the desired protocol)
run the following :
make clean
export PATH=/opt/arm-linux-androideabi-4.4.3/bin:$PATH
export LDFLAGS="\
-lssl \
-lcrypto \
-L/home/user/Development/Tools/sdk/android/ndk/platforms/android-8/arch-arm/usr/lib"
export CFLAGS="\
-I/home/user/Development/AOSP/2.3.7/system/core/include \
-I/home/user/Development/Tools/sdk/android/ndk/platforms/android-8/arch-arm/usr/include"
./configure --host=arm-linux-androideabi \
--with-ssl=/home/user/Development/Projects/portingLibs/openssl-android-master \
--disable-ftp \
--disable-gopher \
--disable-file \
--disable-imap \
--disable-ldap \
--disable-ldaps \
--disable-pop3 \
--disable-proxy \
--disable-rtsp \
--disable-smtp \
--disable-telnet \
--disable-tftp \
--without-gnutls \
--without-libidn \
--without-librtmp \
--disable-dict
make
Note that in the block above, if you don't want to use the AOSP source, you could switch
-I/home/user/Development/AOSP/2.3.7/system/core/include \
with the include folder for your ssl distribution.
So finally you have :
static :
curl-7.28.1/lib/.libs/libcurl.a
and shared :
curl-7.28.1/lib/.libs/libcurl.so.5.3
So that's it.. take the file, and compile away :)
#Tancho
I made the change to line __gmsl:512 that you mentioned. Whilst it allowed OpenSSL to compile it also breaks the building of executables by $(BUILD_EXECUTABLE). Before the change my simple hello world application compiles and runs, but after the change it compiles but running it on my Nexus results in a seg fault.
Revert the change and all is well again. I don't know how to fix this, I don't really know what that line does, but this is just a little warning to anybody making that change.
Related
I'm new to the whole git submodule thing, but as far I can tell I've done the process correctly for the git side of this equation. I only have a few C++ files that are in a git submodule to be used as an Android library. I previously had the folders that are currently in the submodule just placed in my jni folder and all my imports worked there.
The structure of my files looked like this:
(There was one more level. in jniLib there was also armeabi-v7a then in there was the osm and google folders. It was an older pic I had, sorry. It worked that way as well.)
Now the structure is like this:
I've changed my Android.mk file accordingly.
This is it here:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := protobuf-lite
LOCAL_SRC_FILES := nearby_osm_lib/osm/libprotobuf-lite.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := native-lib
LOCAL_SHARED_LIBRARIES := libprotobuf-lite
LOCAL_CPP_EXTENSION := .cxx .cpp .cc
LOCAL_LDFLAGS := -lz -llog
LOCAL_CPP_FEATURES := rtti
LOCAL_SRC_FILES := \
nearby_osm_lib/osm/native-lib.cpp \
nearby_osm_lib/google/include/protobuf/io/coded_stream.cc \
nearby_osm_lib/google/include/protobuf/wire_format_lite.cc \
nearby_osm_lib/google/include/protobuf/arenastring.cc \
nearby_osm_lib/google/include/protobuf/arena.cc \
nearby_osm_lib/google/include/protobuf/stubs/int128.cc \
nearby_osm_lib/google/include/protobuf/message_lite.cc \
nearby_osm_lib/google/include/protobuf/io/zero_copy_stream_impl_lite.cc \
nearby_osm_lib/google/include/protobuf/io/zero_copy_stream.cc \
nearby_osm_lib/google/include/protobuf/generated_message_util.cc \
nearby_osm_lib/google/include/protobuf/stubs/common.cc \
nearby_osm_lib/osm/BeaconSearchResult.cpp \
nearby_osm_lib/osm/Geopoint.cpp \
nearby_osm_lib/osm/fileformat.pb.cc \
nearby_osm_lib/osm/osmformat.pb.cc \
nearby_osm_lib/osm/Location.cpp \
nearby_osm_lib/osm/osmpbf.cpp \
nearby_osm_lib/osm/OSMPBFread.cpp \
nearby_osm_lib/osm/OSMPOISearch.cpp \
nearby_osm_lib/osm/POI.cpp \
LOCAL_CFLAGS := -std=c++11
include $(BUILD_SHARED_LIBRARY)
Now here is the real problem here:
I know I can go in and fix the path and it will work, but I have a lot of files I would have to change. Before the submodule it worked and after it doesn't. I've tried searching around, but no one really has this particular problem. The things I found tend to be two separate Android Studio Projects that they use as submodules.
What I'm using:
Windows 10 64-bit
Android Studio 3.0.1
Any help would be deeply appreciate it. I'm sure there is a way to tell Android studio to look in the submodule but I'm just not sure how. If you need anything else from me just ask.
Edit: I'm sorry I mean to clearify a bit more. The line that the program is messing up on is:
#include "google/include/protobuf/stubs/common.h"
I can fix it with a slight change:
#include "../google/include/protobuf/stubs/common.h"
but then that opens the flood gates to more include errors that I need to fix. Before it didn't have this issue.
I've found the answer. Everything ended up being right in how I added the git submodule to my project. Someone told me that my Android.mk file should also be in the submodule so I moved it there, but that was not the fix to my problem. Once I had moved the file I came across a different issue and it was telling me there were no rules to make my 'native-lib.cpp'. That problem took me a while to solve. In the path
myProject/app/build/intermediates/jniLibs/debug/
there was an old copy of the folders from when it was not a git submodule. Because of this every time I would try to build my gradle it would give me that no rule make error. I hope this ends up helping someone else out.
I added some new functionality in C and when I try to build it, it gives me the following error:
libnativehelper/include/nativehelper/JNIHelp.h:116: error: undefined reference to 'jniRegisterNativeMethods' error.
I have included jnihelp.h in my C files.
Is this a makefile related issue or am I missing something?
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := newfile
LOCAL_SRC_FILES := newfile.cpp
include $(BUILD_SHARED_LIBRARY)
EDIT 6/5/14: I finally fixed it. Just thought I'd put all the info here in case someone else needs it.
The manifest had to be modified to load certain libraries as mentioned in my comment below.This was to fix the undefined reference to 'jniRegisterNativeMethods' error
The cpp file that had the native implementation had to be inside an extern "C" block. This was causing the UnsatisfiedLinkError.
You need to go to parent folder where you have your build and dalvik binaries. Then from there you need to type:
build yourproj
(replace yourproj with folder you have your codes in it)
I found the issue was indeed in the makefile
I looked around for other JNI implementations and added this to the makefile
LOCAL_SHARED_LIBRARIES := \
libandroid_runtime \
libandroidfw \
libnativehelper \
libRS \
libcutils \
libskia \
libutils
I have no idea what a few of the libraries in there are for, but I left them there and it compiled.
Now I have a different issue. I get the 'Unsatified Link error' when I load the compiled library. Does anyone have an idea on this?
Edit: My compiled libraries are being transferred to the phone. I manually pushed them onto the /system/lib directory on the phone but I still get the 'UnsatisfiedLinkError'.
I want to use G.729 audio codec on my android application. I have did a lot research on this and came to know that pjsip is most promising solution for this. But I have not much idea about all this. can someone provide me complete steps for using pjsip in existing android application and how can i include support of G729 codec via pjsip.
Any help will be appreciated.
EDIT :
Here is my android.mk file. I want to know that,have i did this right? and how to use those C functions in my java code???
include $(CLEAR_VARS)
LOCAL_MODULE := pjsua-arm-unknown-linux-androideabi
LOCAL_SRC_FILES := $(MY_PJLIB_PATH)/libpjsua-arm-unknown-linux-androideabi.a
PJSIP_LIBS := $(addprefix pjsip_libs/, \
libg7221codec-arm-unknown-linux-androideabi.a \
libg7221codec-i686-apple-darwin9.a \
libgsmcodec-arm-unknown-linux-androideabi.a \
libgsmcodec-i686-apple-darwin9.a \
libilbccodec-arm-unknown-linux-androideabi.a \
libmilenage-arm-unknown-linux-androideabi.a \
libmilenage-i686-apple-darwin9.a \
libpj-arm-unknown-linux-androideabi.a \
libpj-i686-apple-darwin9.a \
libpjlib-util-arm-unknown-linux-androideabi.a \
libpjlib-util-i686-apple-darwin9.a \
libpjmedia-audiodev-i686-apple-darwin9.a \
libpjmedia-codec-i686-apple-darwin9.a \
libpjmedia-i686-apple-darwin9.a \
libpjmedia-videodev-i686-apple-darwin9.a \
libpjnath-arm-unknown-linux-androideabi.a \
libpjnath-i686-apple-darwin9.a \
libpjsdp-i686-apple-darwin9.a \
libpjsip-i686-apple-darwin9.a \
libpjsip-simple-i686-apple-darwin9.a \
libpjsip-ua-i686-apple-darwin9.a \
libpjsua-i686-apple-darwin9.a \
libportaudio-i686-apple-darwin9.a \
libresample-arm-unknown-linux-androideabi.a \
libresample-i686-apple-darwin9.a \
libspeex-arm-unknown-linux-androideabi.a \
libsrtp-arm-unknown-linux-androideabi.a \
libsrtp-i686-apple-darwin9.a )
LOCAL_STATIC_LIBRARIES := $(PJSIP_LIBS)
include $(PREBUILT_STATIC_LIBRARY)
First step is build pjsip source code for Android (steps for Ubuntu Linux):
Set ANDROID_NDK_ROOT environment variable to your NDK's root folder.
Go to pjsip 2.x folder and create pjlib/include/pj/config_site.h including config_site_sample.h (#include <pj/config_site_sample.h>)
Run ./configure-android
Run make clean && make depend && make
After these steps, you will have several static libraries in several folders. I suggest to group them in a same folder (better in your project) by:
mkdir <your_project_path>/pjsip_libs
find . -name *.a | xargs -I % cp % <your_project_path>/pjsip_libs/
Once you've all libraries, you need to add those libraries into your project's Android.mk file, this is done by including a new module section per library. This module section should be something like:
include $(CLEAR_VARS)
LOCAL_MODULE := pjsua-arm-unknown-linux-androideabi
LOCAL_SRC_FILES := $(MY_PJLIB_PATH)/libpjsua-arm-unknown-linux-androideabi.a
include $(PREBUILT_STATIC_LIBRARY)
And, in the section you're actually building your JNI project's source code, add all modules to your static library references:
LOCAL_STATIC_LIBRARIES := pjsua-arm-unknown-linux-androideabi ...
This will include pjsip references into your JNI library. Now, you need to configure a pjsip UA instance.
You've a explanation about init and start pjsip's UA (pjsua) in pjsip/include/pjsua-lib/pjsua.h but main steps to follow are:
Create a UA instance with pjsua_create
Create a worker thread with pj_thread_create
Set default configuration for UA instance:
pjsua_config cfg;
pjsua_logging_config log_cfg;
pjsua_media_config media_cfg;
pj_cli_cfg_default(&app_config.cli_cfg.cfg);
pjsua_logging_config_default(&log_cfg);
pjsua_media_config_default(&media_cfg);
Init the stack with pjsua_init
Start the stack with pjsua_start
From here, you've plenty of configuration options (log, media, transport, etc.)
You can find a basic PJSIP tutorial here and, inside pjsip's source root path, you've a basic (but complete enough for a basic SIP usage) at: pjsip-apps/src/samples/simple_pjsua.c
Edit: When building android project in pjsip-apps, you can face a problem because pjsua-app is not generated by default on the general build (more specifically, pjsua: target is not included on all: target at pjsip-apps/build/Makefile). To fix this just go to pjsip-apps/build and run:
make pjsua
This would create proper object files at: pjsip-apps/build/output/pjsua-arm-unknown-linux-androideabi/ (needed when building android sample).
Once you've all corresponding object files, you can run ndk-build again at pjsip-apps/src/pjsua/android
To integrate the G.729 codec into your PJSIP project, you just want to get Intel IPP compilers from Intel and you can integrate them into your project easily.
Follow this link.
Following is my MAKE file for the source that i'm compiling with the build AOSP
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= abc.c
LOCAL_MODULE:= abc
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_STATIC_LIBRARIES := libc
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_MODULE_TAGS := debug
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/../../../external/sqlite/dist \
$(LOCAL_PATH)/../../../external/sqlite/android
LOCAL_SHARED_LIBRARIES := \
libsqlite \
libsqlite3_android
include $(BUILD_EXECUTABLE)
here, in the source abc.c i'm trying to use the functions declared in sqlite3.h. When i'm trying to build the android source it is returning error
no rule libsqlite3_android.so to make target abc.so
i want to link the sqlite library to my source file.
Plz help me to find where i'm going wrong and how can i solve the problem.
First, make sure you have built SQLite3 before. (You should build the whole project before add any new stuff or customize any code)
Second, make sure you are build the same target product when you build the SQLite3. (Make sure you have select the correct menu when you do 'lunch').
Last, make sure the SQLite3 objects is in the target folders. YOURANDROIDROOT/out/target/PRODUCTNAME/system/symbols...
In fact, you shouldn't have to link with libsqlite3_android library.
According to the AOSP libsqlite makefile (external/sqlite/android/Android.mk), libsqlite3_android is a STATIC library which is included in the libsqlite dynamic library (external/sqlite/dist/Android.mk).
So linking with libsqlite should be enough.
I have the following situation,
I am porting a piece of an app using OpenSSL for AES encryption, I have everything compile, but the linker fails. The situation is the following:
1. I wrote a JNI wrapper that simply does :
private native String cipherString(String plainData, int datasize, String password, int passSize);
private native String decipherString(String cipheredData, int datasize, String password, int passSize);
next I have a c++ file which I call that has the proper JNI sintax which translates jstring to char * and all other needed transformations, and makes a call to another cpp file which actually imports openssl headers (present and accounted for) and calls openssl methods for ciphering and deciphering.
So when I call ndk-build, it builds all thumbs, so the compiler compiles them correctly.
next i needed to port openssl for android, and I used this OpenSSL for Android
which works like a char with a simple ndk-build (in the root of the project, ofcourse) and builds the libssl.so and libcrypto.so
So I need to connect the two.. I find it a challenge to connect the build scripts, so that one ndk-build compiles and linkes everything (I would appreciate a simple example project if someone has the time for it)
so I copied the compiled libssl and libcrypto .so files in jni/includes/prebuilt and want to include them in the project for the linker to be able to finally create the lib which I will use at the end.
I have the following Android.mk file
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include $(LOCAL_PATH)/includes/build/common.mk
include $(LOCAL_PATH)/includes/build/common_includes.mk
APP_STL := gnustl_static
LOCAL_MODULE := packer
LOCAL_SRC_FILES := modules/cipher/wrapper.cpp \
... #rest of the cpp code
LOCAL_C_INCLUDES += $(LOCAL_PATH)/includes/openssl
LOCAL_SHARED_LIBRARIES := $(LOCAL_PATH)/includes/precompiled/libssl.so \
$(LOCAL_PATH)/includes/precompiled/libcrypto.so
LOCAL_SHARED_MODULES := sslx cryptox
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sslx
LOCAL_SRC_FILES := $(LOCAL_PATH)/includes/precompiled/libssh.so
include $(PREBUILT_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := cryptox
LOCAL_SRC_FILES := $(LOCAL_PATH)/includes/precompiled/libssh.so
include $(PREBUILT_SHARED_LIBRARY)
And when calling ndk-build I get a dissapointing
sslx: LOCAL_SRC_FILES points to a missing file. Check that /home/user/Development/Tools/sdk/android/ndk/build/core//home/user/Development/Tools/sdk/android/ndk/build/core/includes/precompiled/libssh.so exists or that its path is correct. Aborting . Stop.
as you can already guess the path is totally wrong, and what confuses me is that ${LOCAL_PATH} returns correct path for the first batch of includes and a completely wrong one for the .so files ...
Any help would be really appreciated!
Here is the solution, updated to NDK8c
step zero: download and fix the Android NDK
I dunno how but the ndk has a very interesting flaw, which (in my oppinion) doesn't allow you to compile lot's of stuff, so to be able to compile OpenSSL you need to make a small fix, extract the ndk8c whereever you keep your tools, and then edit the file :
android-ndk-r8c/build/gmsl/__gmsl
line 512 :
change line
int_encode = $(__gmsl_tr1)$(wordlist 1,$1,$(__gmsl_input_int))
with line
int_encode = $(__gmsl_tr1)$(wordlist 1,$(words $1),$(__gmsl_input_int))
And you're good to go!
step one : Download OpenSSL and compile for Android :
either compile a ported version found here
or Download the official 1.0.0c version of OpenSSL and then compile it for android using the manual provided in the github I linked for the Android compatible version
So the next step is to get the libssl.so and libcrypto.so
and put the them in the NDK folder for easy access, so copy them from
openssl-folder/libs/armeabi/
to
android-ndk-r8c/platforms/android-8/arch-arm/usr/lib
this way when compiling you can include the libs using a simple linker switch -lssl -lcrypto
Step two : get Curl's latest source for here
Open the file in Docs/INSTALL and follow the steps needed to make the standalone toolchain and put in your desired folder, and then the tricky part, I needed to have android's source code for the config to continue, even though I have a standalone compiled openssl you can include the header files from there too, in anycase this is the more complicated version so you choose what you do, I did not choose to evade them so you can go to Google AOSP site and go trough the steps to build and initialize the environment.
so it would be something like :
1.download,
go to root of the source code and run :
~: build/envsetup.sh; lunch 1; make;
So finally we need to compile curl with SSL support, so,
Step three
extract curl to the desired folder
(I have a specific desire of disabling everything except http/s to keep the library as small as possible meaning about ~300k, if you want more protocols in your lib, remove the --disable-protocol for the desired protocol)
run the following :
make clean
export PATH=/opt/arm-linux-androideabi-4.4.3/bin:$PATH
export LDFLAGS="\
-lssl \
-lcrypto \
-L/home/user/Development/Tools/sdk/android/ndk/platforms/android-8/arch-arm/usr/lib"
export CFLAGS="\
-I/home/user/Development/AOSP/2.3.7/system/core/include \
-I/home/user/Development/Tools/sdk/android/ndk/platforms/android-8/arch-arm/usr/include"
./configure --host=arm-linux-androideabi \
--with-ssl=/home/user/Development/Projects/portingLibs/openssl-android-master \
--disable-ftp \
--disable-gopher \
--disable-file \
--disable-imap \
--disable-ldap \
--disable-ldaps \
--disable-pop3 \
--disable-proxy \
--disable-rtsp \
--disable-smtp \
--disable-telnet \
--disable-tftp \
--without-gnutls \
--without-libidn \
--without-librtmp \
--disable-dict
make
Note that in the block above, if you don't want to use the AOSP source, you could switch
-I/home/user/Development/AOSP/2.3.7/system/core/include \
with the include folder for your ssl distribution.
So finally you have :
static :
curl-7.28.1/lib/.libs/libcurl.a
and shared :
curl-7.28.1/lib/.libs/libcurl.so.5.3
So that's it.. take the file, and compile away :)
#Tancho
I made the change to line __gmsl:512 that you mentioned. Whilst it allowed OpenSSL to compile it also breaks the building of executables by $(BUILD_EXECUTABLE). Before the change my simple hello world application compiles and runs, but after the change it compiles but running it on my Nexus results in a seg fault.
Revert the change and all is well again. I don't know how to fix this, I don't really know what that line does, but this is just a little warning to anybody making that change.