cross compile bluetooth C program(blueZ) for Android - android

In order to run the bluetooth C program on my ubuntu desktop I installed the libbluetooth-dev using
sudo apt-get install libbluetooth-dev
Then I compiled the code with
gcc -o simplescan simplescan.c -lbluetooth
and it executed just fine. However when I tried to cross compiled it for Android using
arm-linux-gnueabi-gcc -o simplescan simplescan.c -lbluetooth
It gave me the error
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lbluetooth
collect2: error: ld returned 1 exit status​
I noticed there was similar post here: Bluetooth programming in Linux - cross compiler issue
But seems like it didn't give a solution, I am still confused how to install the libbluetooth-dev support for the cross compiler.

You cannot link the libbluetooth library that was compiled for a different architecture.
You need to build the libbluetooth library for the architecture your application will be build for.

Related

Compile 32bit binary for ARM

I have a Linux system and an old Nexus 4 phone. I am trying to compile a C application to run on it. Normally, when I compile C applications for other phones, I can simply use
aarch64-linux-gnu-gcc -static main.c
However, the Nexus 4 is old and does not support 64-bit executables
/system/bin/sh: /data/local/tmp/a.out: not executable: 64-bit ELF file
How can I compile a 32 bit application? The compiler does not regognize the -m32 flag
aarch64-linux-gnu-gcc: error: unrecognized command line option '-m32'
I also tried compiling my own cross-compiler using ct-ng, and explicitly enable there 32-bit support, but it did not help.
Can anyone help me please?

How can I compile Qt for Android with bluetooth?

I am pretty new to Qt (and linux for that matter), but need to build an Android app based on Qt with some basic bluetooth functionality. I have been able to build Qt for Android from source and develop a simple app, but QtBluetooth cannot be found.
Starting point:
Ubuntu 18.10 x64
Android NDK r18b
Android SDK (android-27)
OpenJDK v1.8.0_212
Qt 5.12.3
This is my configure command:
./configure -xplatform android-clang -android-ndk [path to NDK] -android-sdk [path to SDK] -android-ndk-host linux-x86_64 -android-toolchain-version 4.9 -no-warnings-are-errors -android-ndk-platform andoird-27 -opensource -confirm-license -v
The configure output shows that none of the Qt Bluetooth components are enabled, and that this is because
"None of [libbluetooth.so libbluetooth.a] could be found in [] and global paths."
"pkg-config use disabled globally"
This is really frustrating because I've installed those libraries: both of those files are in the /usr/lib/x86_65-linux-gnu/ directory! Also pkg-config is installed...
I have tried adding this path (/usr/lib/x86_64-linux-gnu/) to the configure command and copying these libraries into directories that I would have thought are already included, but these workarounds have been fruitless. I am using git to clean the submdodules and main directory between each attempt.
What am I missing?? It feels like this is sooo close to working.

porting libimobiledevice to android

I want to port libimobiledevice to android with ndk in order to make android device enable to communicate with iphone, and import data from iphone to android device. i found this project use autoconf. so i made cross compile use following command
./configure --build=x86_64-pc-linux-gnu --host=arm-linux-androideabi --target=arm-linux-androideabi CPPFLAGS="-I$ANDROID_NDK/platforms/android-14/arch-arm/usr/include -I$ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/include -I$ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi/include -I$ANDROID_NDK/sources/crystax/include" CFLAGS="-nostdlib" LDFLAGS="-Wl,-rpath-link=$ANDROID_NDK/platforms/android-14/arch-arm/usr/lib -L$ANDROID_NDK/platforms/android-14/arch-arm/usr/lib" LIBS="-lc"
but run into some error, can't find pthread python.
checking for pthread_create, pthread_mutex_lock in -lpthread... no
configure: error: libpthread is required to build libimobiledevice
checking for a version of Python >= '2.1.0'... yes
checking for the distutils Python package... yes
checking for Python include path... -I/usr/include/python2.7
checking for Python library path... -L/usr/lib/python2.7 -lpython2.7
checking for Python site-packages path... /usr/lib/python2.7/site-packages
checking python extra libraries... -ldl
checking python extra linking flags...
checking consistency of all components of python development environment... no
configure: error:
Could not link test program to Python. Maybe the main Python library has been
installed in some non-standard library path. If so, pass it to configure,
via the LDFLAGS environment variable.
Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
============================================================================
ERROR!
You probably have to install the development version of the Python package
for your distribution. The exact name of this package varies among them.
============================================================================

NDK build error with cygwin

i am tying to build a tesseract project to use as a library for my project. I am getting this error with cygwin when trying to build on windows 7 with User Account Controls turned off.
$ /cygdrive/c/android-ndk-r8/ndk-build
SharedLibrary : liblept.so
C:/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/libgnustl_static.a: No such file: Permission denied
collect2: ld returned 1 exit status
/cygdrive/c/android-ndk-r8/build/core/build-binary.mk:369: recipe for target `obj/local/armeabi/liblept.so' failed
make: *** [obj/local/armeabi/liblept.so] Error 1
please let me know what i should do to build the project.
Sorry It's my first time answering a question.
I was having a same issue as yours.
Then I solve it using cygwin bash with command: $ chmod -R 777 /cygdrive/c/android/workspace
C:/Android/workspace is my Eclipse work space.
Some one here gave me the insight
A lot of people have struggled with compiling tesseract under Windows, and Cygwin is normally suggested, however its often not necessary.
Have you tried looking at the tess-two project on github? Its tesseract wrapped with some handy android classes, compiling a running is simply a case of :
git clone git://github.com/rmtheis/tess-two tess
cd tess
cd tess-two
ndk-build
android update project --path .
ant release
I've been able to compile the above on 3 windows7 machines, a mac, and ubuntu without any issues.
if you're developing under windows, go to the file, and change it's premissions to full control.
it will be in /obj dir

Android NDK - building TessTwo (Fork of Tesseract Tools for Android) - ndk-build fails

when I run ndk-build, it fails complaining from the following errors:
$ ndk-build
make: /…/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc: Command not found
Compile arm : jpeg <= jcapimin.c
make: /…/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc: Command not found
make: *** [obj/local/armeabi/objs/jpeg/jcapimin.o] Error 127
The problem is that although it says "command not found", "arm-linux-androideabi-gcc" exists in the above path. Even when I run "arm-linux-androideabi-gcc" directly from /…/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/ it gives the same error of "command not found"
I also added ./toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin to my PATH but still getting the same error. Even I tried different versions of ndk (7, 7b, 6b) still same error! seems to me the above gcc is meant for 32bit machines whereas my machine is "Linux 2.6.32-37-server x86_64". but I guess the ndk package should work for both 32 and 64bit. am I right? do I need to compile or build ndk before using it? I assume downloading and unpacking is all I have to do. right? how about sdk? I just downloaded and unpacked it at the same folder that I have my ndk. do I need to configure them to work with each other
I ran into the same problem. You are right, the problem is due to trying to run a 32-bit binary on a 64-bit kernel.
I solved it on Ubuntu 11.10 by installing the 32-bit compatibility libs:
sudo apt-get install ia32-libs

Categories

Resources