aapt missing but its there - linux

I had to reinstall ubuntu-14.04-64 due to reasons.
After this reinstall, when I try to build my android projets, I get a bunch of these lines (among others) in output:
java.io.IOException: Cannot run program "/home/gps/Android/Sdk/build-tools/23.0.2/aapt": error=2, No such file or directory
Now, I know this file exists in my setup because this:
gps#gps-HP-ProBook-4540s:~$ ls -l /home/gps/Android/Sdk/build-tools/23.0.2/aapt
-rwxrwxr-x 1 gps gps 1146608 Jan 4 18:47 /home/gps/Android/Sdk/build-tools/23.0.2/aapt
gps#gps-HP-ProBook-4540s:~$ file /home/gps/Android/Sdk/build-tools/23.0.2/aapt
/home/gps/Android/Sdk/build-tools/23.0.2/aapt: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=fc8aded5418584519d59f2133e81184fe3d4bdfd, not stripped
gps#gps-HP-ProBook-4540s:~$
I have installed all sdk tools from v19 onwards. Changing project settings to any of them shows same error.
Also, trying to execute the file directly gives same error:
gps#gps-HP-ProBook-4540s:~$ /home/gps/Android/Sdk/build-tools/23.0.2/aapt
bash: /home/gps/Android/Sdk/build-tools/23.0.2/aapt: No such file or directory
Can someone suggest a solution to this problem?

Problem solved as follows:
Issue was missing 32 bit libraries, libc and zlib in this case. Installed using following :
sudo apt-get install libc6:i386
sudo apt-get install zlib1g-dev:i386
Thanks #Joni for clear directions.

You're probably missing some dynamic link library that the program needs. Run this command to list the libraries it uses and install those that are missing:
ldd /home/gps/Android/Sdk/build-tools/23.0.2/aapt

Solution as of Ubuntu 16.04 / 16.10 to enable 32 bit binaries to run on 64 bit host
sudo dpkg --add-architecture i386
sudo apt-get -qqy update
sudo apt-get -qqy install libncurses5:i386 libstdc++6:i386 zlib1g:i386

Related

How to install a 32-bit node.js(8.5.0) into a 64-bit ubuntu(17.0)?

I've downloaded 32-bit、64-bit node binaries of v8.5. Currently I also have a 64-bit ubuntu os(v17.0). I tried ./bin/node both on 64-bit binaries and 32-bit binaries, and 64-bit was working fine but 32-bit node binary returns bash: ./node: No such file or directory.
So how do I run 32-bit node on 64-bit a linux system?
You may ask why I'm doing this, because there are some very old .so library which is 32-bit, I can't get this library working with node-ffi with 64-bit node, so sadly I have to install a 32-bit node.
Also, I've tried nvm install 8.5.0 32, it downloads x64 sadly. And I just realize this only works in windows with this nvm-windows, which indicates there is a way to install a 32-bit node on a 64-bit OS?
Take a look atthis article
First you'll need to enable 32-bit support:
sudo dpkg --add-architecture i386
sudo apt -get update
The article I linked to then recommends apt-get dist-upgrade, but I'm not actually sure that will do much for you.
Then you'll need to install the libraries that the 32-bit version of node uses.
sudo apt-get install libc6:i386
will install the base set of libraries that all applications need in 32-bit mode.
sudo apt-get install libares2:i386 libicu57:i386 libstdc++6:i386 libgcc1:i386
should get you to a point where running ./node gives a useful error pointing to a specific library that you need to install so that Node can run.
I've tried: sudo apt install nodejs
And it worked.

error while loading shared libraries: libncurses.so.5:

I've installed Android Studio and tried to run my first project in it, and I've got following error:
Error Output was: /home/user/android-studio/sdk/platform-tools/adb: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
I've already tried to run
sudo ldconfig
but it doesnt help. I've recently installed libncurses (before using android studio).
What should I do?
If libncurses is not installed then install it and try again.
for 32-bit binaries : sudo apt-get install libncurses5:i386
for 64-bit binaries :
sudo apt-get install libncurses5
Also install the collection of libraries by using this command,
sudo apt-get install ia32-libs
error while loading shared libraries: libncurses.so.5
If you see this, your distro probably has a newer version of libncurse installed. First find out what version of libncurses your distro has:
$ ls -1 /usr/lib/libncurses*
/usr/lib/libncurses.so
/usr/lib/libncurses++.so
/usr/lib/libncurses++w.so
/usr/lib/libncursesw.so
/usr/lib/libncurses++w.so.6
/usr/lib/libncursesw.so.6
/usr/lib/libncurses++w.so.6.0
/usr/lib/libncursesw.so.6.0
In this case, we are dealing with version 6, so we make two symlinks:
$ sudo ln -s /usr/lib/libncursesw.so.6.0 /usr/lib/libncurses.so.5
$ sudo ln -s /usr/lib/libncursesw.so.6.0 /usr/lib/libtinfo.so.5
After this, the program should run normally.
If you are absolutely sure that libncurses, aka ncurses, is installed, as in you've done a successful 'ls' of the library, then perhaps you are running a 64 bit Linux operating system and only have the 64 bit libncurses installed, when the program that is running (adb) is 32 bit.
If so, a 32 bit program can't link to a 64 bit library (and won't locate it anyway), so you might have to install libcurses, or ncurses (32 bit version). Likewise, if you are running a 64 bit adb, perhaps your ncurses is 32 bit (a possible but less likely scenario).
For Redhat Linux 8 try this:
sudo yum install libncurses*
On Arch Linux you can install ncurses5-compat-libs AUR package.
FYI it is mentioned in Arch Wiki android page, just in case if you'll need some other dependencies for Android Studio: https://wiki.archlinux.org/index.php/Android
For Redhat Linux this helped,
sudo yum install ncurses-compat-libs
In Fedora 28 use:
sudo dnf install ncurses-compat-libs
I solved the issue using
ln -s libncursesw.so.5 /lib/x86_64-linux-gnu/libncursesw.so.6
on ubunutu 18.10
On Arch, i fix like this:
sudo ln -s /usr/lib/libncursesw.so.6 /usr/lib/libtinfo.so.6
To install ncurses-compat-libs on Fedora 24 helped me on this issue
(unable to start adb error while loading shared libraries: libncurses.so.5)
Your system likely does not provide the ncurses library at the version android studio uses. My arch linux install only had ncurses 6 but android studio needs version 5.
You could check if your distribution has a compatability package, or use the solution that Rahmat Aligos suggested.
Mixaz's above answer worked for me. However I had issues installing the package because of PGP check failures. Installing it by skipping the signature worked, you could try this :
yaourt --m-arg "--skipchecksums --skippgpcheck" -Sb <your-package>

Enabling gcc-multilib manually after successful gcc installation on Debian system?

I installed gcc-4.7.2 on my i686 Debian system successfully but i don't know how to enable gcc-multilib after installation.
I installed gcc-4.7.2 on my debian system with configuration "--enable-multilib" but it does not work.
I copied the files(gcc-multilib package files) at the same location mentioned in gcc-multilib package file list though it does not work.
i guess you must install gcc-multilib:
sudo apt-get install gcc-multilib libc6-dev-i386

gcc-arm-linux-gnueabi command not found

I am trying to install the gnu arm toolchain for ubuntu. I first downloaded the tar from CodeSourcery. However when I go into the bin folder, I cannot run any of the binaries. I have tried with ./ and without and putting it in the PATH and it keeps telling me "Command not Found" yet the file is there in the folder right in front of me. Then I tried sudo apt-get install gcc-arm-linux-gnueabi except after it says it has installed successfully, I cannot find it with whereis gcc-arm-linux-gnueabi. Can anyone help?
fixed, using:
sudo apt-get install gcc-arm*
Are you compiling on a 64-bit OS? Try:
sudo apt-get install ia32-libs
I had the same problem when trying to compile the Raspberry Pi kernel. I was cross-compiling on Ubuntu 12.04 64-bit and the toolchain requires ia32-libs to work on on a 64-bit system.
See http://hertaville.com/2012/09/28/development-environment-raspberry-pi-cross-compiler/
CodeSourcery convention is to use prefix arm-none-linux-gnueabi- for all executables, not gcc-arm-linux-gnueabi that you mention. So, standard name for CodeSourcery gcc would be arm-none-linux-gnueabi-gcc.
After you have installed CodeSourcery G++, you need to add CodeSourcery directory into your PATH.
Typically, I prefer to install CodeSourcery into directory like /opt/arm-2010q1 or something like that. If you don't know where you have installed it, you can find it using locate arm-none-linux-gnueabi-gcc, however you may need to force to update your locate db using sudo updatedb before locate will work properly.
After you have identified where your CodeSourcery is installed, add it your PATH by editing ~/.bashrc like this:
PATH=/opt/arm-2010q1/bin:$PATH
Also, it is customary and very convenient to define
CROSS_COMPILE=arm-none-linux-gnueabi-
in your .bashrc, because with CROSS_COMPILE defined, most tools will automatically use proper compiler for ARM compilation without you doing anything.
if you are on 64 bit os then you need to install this additional libraries.
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
got the same error when trying to cross compile the raspberry pi kernel on ubunto 14.04.03 64bit under VM. the solution was found here:
-Install packages used for cross compiling on the Ubuntu box.
sudo apt-get install gcc-arm-linux-gnueabi make git-core ncurses-dev
-Download the toolchain
cd ~
git clone https://github.com/raspberrypi/tools
-Add the toolchain to your path
PATH=$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
notice the x64 version in the path command
I was also facing the same issue and resolved it after installing the following dependency:
sudo apt-get install lib32z1-dev
If you are on a 64bit build of ubuntu or debian (see e.g. 'cat /proc/version') you should simply use the 64bit cross compilers, if you cloned
git clone https://github.com/raspberrypi/tools
then the 64bit tools are in
tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64
use that directory for the gcc-toolchain.
A useful tutorial for compiling that I followed is available here Building and compiling Raspberry PI Kernel (use the -x64 path from above as ${CCPREFIX})
You have installed a toolchain which was compiled for i686 on a box which is running an x86_64 userland.
Use an i686 VM.
Its a bit counter-intuitive. The toolchain is called gcc-arm-linux-gnueabi. To invoke the tools execute the following: arm-linux-gnueabi-xxx
where xxx is gcc or ar or ld, etc
try the following command:
which gcc-arm-linux-gnueabi
Its very likely the command is installed in /usr/bin.
I had to cross compile C code in Ubuntu for ARM. This worked for me:
$ sudo apt install gcc-arm-none-eabi
Later, tested it on the qemu emulator
#Install qemu
sudo apt-get install qemu qemu-user-static qemu-system-arm
#Cross compile "helloworld.c"
$ arm-none-eabi-gcc --specs=rdimon.specs -Wl,--start-group -lgcc -lc -lm -lrdimon -Wl,--end-group helloworld.c -o helloworld
#Run
qemu-arm-static helloworld

/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory

I am trying to install roccc 2.0. I have installed required packages. Now while installing it, it is giving me this error:
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory
I searched for gnu/stubs-32.h and came to know, for Linux 64-bit its in glibc-devel and for Linux 32-bit, its in libc6-dev-i386.
I am using Linux 32-bit: i386 GNU/Linux, but couldn't get the lib required to resolve this error.
Can somebody please help me out?
If your Linux distro is Redhat based (Fedora/CentOS/RHEL):
yum install glibc-devel.i686
References
Original post answer solved this problem RHEL x64
Header file gnu/stubs-32.h is under /usr/include/i386-linux-gnu/ but the install script tries to find it in /usr/include/, try this quick fix to complete the installation:
sudo ln -s /usr/include/i386-linux-gnu/gnu/stubs-32.h /usr/include/gnu/stubs-32.h
After installation is finished, you can delete the link.
The package name keeps on changing, just do a
yum list glibc-devel
to find out current package for 32 bit. In my case it only listed 2 packages one for 32 bit and one for 64 bit. I just installed the 32 bit using
yum install glibc-devel.i686
Install 'glibc-devel' package, or whatever it called in your distro. You may also need to install ia32-libs lib32z1-dev lib32bz2-dev (names could be different in your distro).
The script is trying to get stubs-32.h from /usr/include/ where it is not found. To solve this you have to add an "include" path (by default it is /usr/include) like this:
C_INCLUDE_PATH=/usr/include/i386-linux-gnu/
export C_INCLUDE_PATH
OR
export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
You can visit Error "gnu/stubs-32.h: No such file or directory" while compiling Nachos source code for additional reference.
If on a Red Hat distro such as Fedora/CentOS/RHEL you can do the following to find out what package provides a given file:
$ repoquery -qf */stubs-32.h
glibc-devel-0:2.17-260.el7.i686
And then install it:
$ sudo yum install -y glibc-devel-0:2.17-260.el7.i686

Resources