I'm studying Assembly and I need to compile a piece of C code into a 32-bit executable file. The issue is that I keep getting this error. I've tried installing gcc-multilib and g++-lib, but it hasn't helped. Anyone know what might be going on?

> gcc main.s -m32 -o main

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status

Using gcc version 4.8.5 (Ubuntu 4.8.5-4ubuntu4) on Ubuntu 16.10.

Update: Added the compilation command. I compiled the .s file beforehand using gcc -m32 -S main.c because I needed to have a look at the Assembly code.

  • Please edit your question to include the exact command you are using to compile the code - not just the error message – steeldriver Apr 15 '17 at 1:22
  • Well I suspect that gcc-multilib only installs the 32-bit components for the default gcc (i.e. gcc-6 on 16.10) - have you tried installing the corresponding gcc-4.8-multilib? – steeldriver Apr 15 '17 at 2:18

The gcc-multilib package only provides 32-bit support for the current default compiler.

Since you are using a non-default compiler (gcc-4.8 versus the system's default gcc-6) you will need to install the underlying version-specific multilib package explicitly e.g.

sudo apt install gcc-4.8-multilib

(or the equivalent from your favorite package manager).

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.