7

I am using gcc to compile a C++ application on my CI server (http://ci.berboe.co.uk) and as the vps that it is compiled on has the x86-64 architecture I need to cross-compile to get the compiled program to work on x86 computers.

I have installed gcc-multilib and g++-multilib and several other packages that were suggested in other places, but I still get an error when trying to compile. It is:

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: ld returned 1 exit status

Full logs are available here: http://ci.berboe.co.uk/job/MCServer%20Linux-x86/11/console

Any help towards resolving this issue would be much appreciated.

Edit:

/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crt1.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtbegin.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtend.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crtn.o' is incompatible with i386 output
/usr/bin/ld: final link failed: Invalid operation

I get this after having fixed the previous problem.

0

3 Answers 3

3
+50
  • Install 32 bits libs (ia32-libs in some distros, moving to this: http://wiki.debian.org/Multiarch/HOWTO in others, more on that if you ask for it).
  • Be sure to add the i386 library path to your LD_LIBRARY_PATH env. variable. (most certainly export LD_LIBRARY_PATH = ${LD_LIBRARY_PATH}:/lib32:/usr/lib32:/usr/lib/i386-linux-gnu and so one).
  • Be sure to add the i386 include path to your LD_INCLUDE_PATH environment variable.

Feel free to look for these libraries (once installed of course), using:

find / -iname "*libstdc++.so*" 2> /dev/null

for instance for the libstdc++.so library. find should report some path that you will be able to add to your LD_LIBRARY_PATH environment variable.

7
  • I installed the package, but the compilation still does not work. I tried adding the LDLIBPATH to the .bashrc and then putting it right before and doing a manual make, and it still didn't work. Feb 6, 2013 at 20:43
  • 1
    export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/lib32:/usr/lib32:/usr/lib/i386-linux-gnu Feb 7, 2013 at 17:49
  • This is the error: /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.so when searching for -lstdc++ /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a when searching for -lstdc++ /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.so when searching for -lstdc++ /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a when searching for -lstdc++ And the command shows locations in /lib32 and /usr/lib32 so it should work. Feb 9, 2013 at 8:01
  • The problem is, I have. The C++ args are: -m32 -s -g -O3 -DNDEBUG. Feb 9, 2013 at 20:35
  • However, please see my edit I have another problem. Feb 10, 2013 at 12:41
1

There are two options that might work:

  1. Install ia32-libs package by running sudo apt-get install ia32-libs . It is just a hunch, it might or it might not work.
  2. Another solution can be to install a 32-bit linux on a virtual machine to compile the code.

This link might help: - http://en.sfml-dev.org/forums/index.php?topic=6034.0

1

You'd be better off making an i386 chroot. mk-sbuild (in ubuntu-dev-tools) and schroot make these very easy to manage.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .