[Bug 1375071] Re: g++-arm-linux-gnueabi cannot compile a C++ program with --sysroot
Launchpad Bug Tracker
1375071 at bugs.launchpad.net
Wed Sep 16 14:28:47 UTC 2015
Status changed to 'Confirmed' because the bug affects multiple users.
** Changed in: gcc-defaults-armhf-cross (Ubuntu)
Status: New => Confirmed
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to gcc-defaults-armhf-cross in
Ubuntu.
https://bugs.launchpad.net/bugs/1375071
Title:
g++-arm-linux-gnueabi cannot compile a C++ program with --sysroot
Status in gcc-defaults-armel-cross package in Ubuntu:
Confirmed
Status in gcc-defaults-armhf-cross package in Ubuntu:
Confirmed
Bug description:
g++-arm-linux-gnueabi cannot compile a C++ program with --sysroot. It
appears there are problems with the built-in paths used for the C++
headers.
The rest of the report just dumps information. But to summarize the
dump...
We need the paths:
A) /usr/arm-linux-gnueabi/include/c++/4.7.3
B) /usr/arm-linux-gnueabi/include/c++/4.7.3/arm-linux-gnueabi
But the built-in paths tries to use:
C) /usr/arm-linux-gnueabi/usr/arm-linux-gnueabi/include/c++/4.7.3
D) /usr/arm-linux-gnueabi/usr/arm-linux-gnueabi/include/c++/4.7.3/arm-linux-gnueabi/sf
E) /usr/arm-linux-gnueabi/usr/arm-linux-gnueabi/include/c++/4.7.3/backward
Notice the built-in paths use an extra "/usr/arm-linux-gnueabi"
*****
Ubuntu 14.04 (x64), fully patched. gcc-arm-linux-gnueabi and g++-arm-
linux-gnueabi are installed.
$ uname -sm
Linux x86_64
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty
*****
$ /usr/bin/arm-linux-gnueabi-g++ --version
arm-linux-gnueabi-g++ (Ubuntu/Linaro 4.7.3-12ubuntu1) 4.7.3
Copyright (C) 2012 Free Software Foundation, Inc.
And:
$ ls /usr/arm-linux-gnueabi
bin include lib
And:
$ cat embedded.cpp
#include <iostream>
int main(int argc, char* argv[])
{
std::cout << "Hello World" << std::endl;
return 0;
}
*****
$ /usr/bin/arm-linux-gnueabi-g++ --sysroot=/usr/arm-linux-gnueabi embedded.cpp -o embedded.exe
embedded.cpp:1:20: fatal error: iostream: No such file or directory
compilation terminated.
*****
It appears the C++ headers are not included with SYSROOT. If I add the
C++ header paths, then the compile is successful:
$ /usr/bin/arm-linux-gnueabi-g++ -I/usr/arm-linux-gnueabi/include/c++/4.7.3 -I/usr/arm-linux-gnueabi/include/c++/4.7.3/arm-linux-gnueabi --sysroot=/usr/arm-linux-gnueabi embedded.cpp -o embedded.exe
$
And:
$ /usr/bin/arm-linux-gnueabi-readelf readelf -h ./embedded.exe | grep -i 'class\|machine'
readelf: Error: 'readelf': No such file
Class: ELF32
Machine: ARM
*****
From http://wiki.ubuntu.com/ToolChain:
$ /usr/bin/arm-linux-gnueabi-g++ -v -E - < /dev/null 2>&1 | awk '/^#include/,/^End of search/' | grep '^ '
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include-fixed
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/include
/usr/include
*****
However, there's actually more to the paths than shown on ToolChain
wiki, and this shows the incorrect C++ lookups. There's an extra '/usr
/arm-linux-gnueabi/' in the paths being used:
$ /usr/bin/arm-linux-gnueabi-g++ -v --sysroot=/usr/arm-linux-gnueabi embedded.cpp -o embedded.exe
Using built-in specs.
COLLECT_GCC=/usr/bin/arm-linux-gnueabi-g++
...
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/arm-linux-gnueabi/usr/arm-linux-gnueabi/include/c++/4.7.3"
ignoring nonexistent directory "/usr/arm-linux-gnueabi/usr/arm-linux-gnueabi/include/c++/4.7.3/arm-linux-gnueabi/sf"
ignoring nonexistent directory "/usr/arm-linux-gnueabi/usr/arm-linux-gnueabi/include/c++/4.7.3/backward"
ignoring nonexistent directory "/usr/arm-linux-gnueabi/usr/local/include/arm-linux-gnueabi"
ignoring nonexistent directory "/usr/arm-linux-gnueabi/usr/include/arm-linux-gnueabi"
ignoring nonexistent directory "/usr/arm-linux-gnueabi/usr/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/include-fixed
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/include
End of search list.
...
*****
$ /usr/bin/arm-linux-gnueabi-g++ -v
Using built-in specs.
COLLECT_GCC=/usr/bin/arm-linux-gnueabi-g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/lto-wrapper
Target: arm-linux-gnueabi
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.7.3-12ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/arm-linux-gnueabi/include/c++/4.7.3 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-gnu-unique-object --disable-libmudflap --disable-libitm --enable-plugin --with-system-zlib --enable-objc-gc --with-cloog --enable-cloog-backend=ppl --disable-cloog-version-check --disable-ppl-version-check --enable-multiarch --enable-multilib --disable-sjlj-exceptions --with-arch=armv5t --with-float=soft --disable-werror --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabi --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include
Thread model: posix
gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-12ubuntu1)
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gcc-defaults-armel-cross/+bug/1375071/+subscriptions
More information about the foundations-bugs
mailing list