Public bug reported:

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-g
 nueabi/include
Thread model: posix
gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-12ubuntu1)

** Affects: gcc-defaults-armel-cross (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1375071

Title:
  g++-arm-linux-gnueabi  cannot compile a C++ program with --sysroot

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gcc-defaults-armel-cross/+bug/1375071/+subscriptions

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to