Skip to Content

File in Wrong Format

Posted on 2 mins read

I have been recently attempting to cross compile a custom Gentoo profile targetting a Xilinx board as I found their distribution to be unmanageable (PetaLinux as hacked together sub-distro of Yocto). I had several issues with the default profile (embedded) conflicting with other critical packages. I’ll do a detailed post later on for building that entire root filesystem.

I came across one issue which didn’t seem to have a well-documented solution. While compiling several packages (most notably GMP which is required for a native GCC) I kept coming across a linker issue late in the compilation:

libtool: link: g++ ...<snip>..../.libs/ error adding symbols: File in wrong format

Since it got so late in the compilation (this is pretty much the last link) I assumed it was an issue with the linker itself. Digging through the ebuilds, and wrappers around the developer environment I couldn’t find anything suspect.

Ultimate I went back and read through the entire build log where I found this in the configure output:

checking for arm-xilinx-linux-gnueabi-g++... no
checking for arm-xilinx-linux-gnueabi-c++... no
checking for arm-xilinx-linux-gnueabi-gpp... no
checking for arm-xilinx-linux-gnueabi-aCC... no
checking for arm-xilinx-linux-gnueabi-CC... no
checking for arm-xilinx-linux-gnueabi-cxx... no
checking for arm-xilinx-linux-gnueabi-cc++... no
checking for arm-xilinx-linux-gnueabi-cl.exe... no
checking for arm-xilinx-linux-gnueabi-FCC... no
checking for arm-xilinx-linux-gnueabi-KCC... no
checking for arm-xilinx-linux-gnueabi-RCC... no
checking for arm-xilinx-linux-gnueabi-xlC_r... no
checking for arm-xilinx-linux-gnueabi-xlC... no
checking for g++... g++
configure.wrapped: WARNING: using cross tools not prefixed with host triplet

The configure script was unable to find a native g++ compiler for my target environment and thus fell back on to the system’s native compiler… which is not compatible with my binaries. I had only performed a stage 3 crossdev setup. Stage 4 is when a C++ compiler and libstdc++ becomes available. I was able to upgrade my crossdev environment in Gentoo using the following command:

crossdev --stable -s4 -v -t arm-xilinx-linux-gnueabi

You will likely want to replace my system triple with your target.