экспериментирую с crosstools-ng. есть вопросы.
при конфигурировании сборки в менюшке включил в состав gcc-4.9.4 и glibc 2.17,
просто хочу с ними собрать бинарник под линукс.
в путь добавил export PATH=»/opt/x-tools/x86_64-linux-gnu/bin:$PATH»
основная структура папок сборки:
/opt/x-tools/
└── x86_64-linux-gnu
├── bin
│ ├── x86_64-linux-gnu-addr2line
│ ├── x86_64-linux-gnu-ar
│ ├── x86_64-linux-gnu-as
│ ├── x86_64-linux-gnu-c++
│ ├── x86_64-linux-gnu-cc -> x86_64-linux-gnu-gcc
│ ├── x86_64-linux-gnu-c++filt
│ ├── x86_64-linux-gnu-cpp
│ ├── x86_64-linux-gnu-elfedit
│ ├── x86_64-linux-gnu-g++
│ ├── x86_64-linux-gnu-gcc
│ ├── x86_64-linux-gnu-gcc-4.9.4
│ ├── x86_64-linux-gnu-gcc-ar
│ ├── x86_64-linux-gnu-gcc-nm
│ ├── x86_64-linux-gnu-gcc-ranlib
│ ├── x86_64-linux-gnu-gcov
│ ├── x86_64-linux-gnu-gdb
│ ├── x86_64-linux-gnu-gdb-add-index
│ ├── x86_64-linux-gnu-gp-archive
│ ├── x86_64-linux-gnu-gp-collect-app
│ ├── x86_64-linux-gnu-gp-display-html
│ ├── x86_64-linux-gnu-gp-display-src
│ ├── x86_64-linux-gnu-gp-display-text
│ ├── x86_64-linux-gnu-gprof
│ ├── x86_64-linux-gnu-gprofng
│ ├── x86_64-linux-gnu-ld
│ ├── x86_64-linux-gnu-ld.bfd
│ ├── x86_64-linux-gnu-ldd
│ ├── x86_64-linux-gnu-nm
│ ├── x86_64-linux-gnu-objcopy
│ ├── x86_64-linux-gnu-objdump
│ ├── x86_64-linux-gnu-populate
│ ├── x86_64-linux-gnu-ranlib
│ ├── x86_64-linux-gnu-readelf
│ ├── x86_64-linux-gnu-size
│ ├── x86_64-linux-gnu-strings
│ └── x86_64-linux-gnu-strip
├── build.log.bz2
├── etc
│ └── gprofng.rc
├── include
│ ├── collectorAPI.h
│ ├── libcollector.h
│ └── libfcollector.h
├── lib
│ ├── bfd-plugins
│ ├── gcc
│ ├── gprofng
│ └── libgprofng.a
├── libexec
│ └── gcc
├── share
│ ├── gcc-4.9.4
│ ├── gdb
│ ├── licenses
│ └── x86_64-linux-gnu-ct-ng.config.bz2
└── x86_64-linux-gnu
├── bin
├── debug-root
├── include
├── lib
├── lib64
└── sysroot
1.
собираю хеловорд:
x86_64-linux-gnu-g++ test.c -o test
смотрю, что получилось по зависимостям.
видно, что фигня полная, зачем он лезет в системные либы, а не использует свои внутренние.
ldd -v test
linux-vdso.so.1 (0x00007ffe2fbe9000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007ff645200000)
libm.so.6 => /lib64/libm.so.6 (0x00007ff64547c000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007ff64545f000)
libc.so.6 => /lib64/libc.so.6 (0x00007ff644e00000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff645560000)
Version information:
./test:
libc.so.6 (GLIBC_2.34) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
libstdc++.so.6 (GLIBCXX_3.4) => /lib64/libstdc++.so.6
/lib64/libstdc++.so.6:
libm.so.6 (GLIBC_2.2.5) => /lib64/libm.so.6
ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
libgcc_s.so.1 (GCC_4.2.0) => /lib64/libgcc_s.so.1
libgcc_s.so.1 (GCC_3.3) => /lib64/libgcc_s.so.1
libgcc_s.so.1 (GCC_3.0) => /lib64/libgcc_s.so.1
libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.6) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.33) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.18) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.16) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.32) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.17) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.34) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libm.so.6:
ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6
/lib64/libgcc_s.so.1:
libc.so.6 (GLIBC_2.35) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.34) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6
libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
/lib64/libc.so.6:
ld-linux-x86-64.so.2 (GLIBC_2.35) => /lib64/ld-linux-x86-64.so.2
ld-linux-x86-64.so.2 (GLIBC_2.2.5) => /lib64/ld-linux-x86-64.so.2
ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
2.
пробую ограничить компилятор по заголовкам и либам, чтобы он использовал только свои внутренние. получаю ошибку, что не видит заголовок.
x86_64-linux-gnu-g++ test.c -o test --sysroot=/opt/x-tools/x86_64-linux-gnu -isysroot=/opt/x-tools/x86_64-linux-gnu
In file included from /opt/x-tools/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/4.9.4/x86_64-linux-gnu/bits/c++config.h:430:0,
from /opt/x-tools/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/4.9.4/iostream:38,
from test.c:1:
/opt/x-tools/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/4.9.4/x86_64-linux-gnu/bits/os_defines.h:39:22: fatal error: features.h: No such file or directory
#include <features.h>
^
compilation terminated.
не совсем понимаю его логику.
вывод свойств и папок компилятора:
x86_64-linux-gnu-g++ -v -E -xc - < /dev/null 2>&1
Using built-in specs.
COLLECT_GCC=x86_64-linux-gnu-g++
Target: x86_64-linux-gnu
Configured with: /opt/.build/x86_64-linux-gnu/src/gcc/configure —build=x86_64-build_pc-linux-gnu —host=x86_64-build_pc-linux-gnu —target=x86_64-linux-gnu —prefix=/opt/x-tools/x86_64-linux-gnu —exec_prefix=/opt/x-tools/x86_64-linux-gnu —with-sysroot=/opt/x-tools/x86_64-linux-gnu/x86_64-linux-gnu/sysroot —enable-languages=c,c++ —with-pkgversion=’crosstool-NG 1.27.0′ —enable-__cxa_atexit —disable-tm-clone-registry —disable-libmudflap —disable-libgomp —disable-libssp —disable-libquadmath —disable-libquadmath-support —disable-libsanitizer —with-gmp=/opt/.build/x86_64-linux-gnu/buildtools —with-mpfr=/opt/.build/x86_64-linux-gnu/buildtools —with-mpc=/opt/.build/x86_64-linux-gnu/buildtools —with-isl=/opt/.build/x86_64-linux-gnu/buildtools —with-cloog=/opt/.build/x86_64-linux-gnu/buildtools —enable-lto —without-zstd —enable-threads=posix —enable-target-optspace —disable-plugin —disable-nls —disable-multilib —with-local-prefix=/opt/x-tools/x86_64-linux-gnu/x86_64-linux-gnu/sysroot —enable-long-long
Thread model: posix
gcc version 4.9.4 (crosstool-NG 1.27.0)
COLLECT_GCC_OPTIONS=’-v’ ‘-E’ ‘-shared-libgcc’ ‘-mtune=generic’ ‘-march=x86-64’
/opt/x-tools/x86_64-linux-gnu/libexec/gcc/x86_64-linux-gnu/4.9.4/cc1 -E -quiet -v — -mtune=generic -march=x86-64
ignoring nonexistent directory «/opt/x-tools/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/opt/x-tools/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/include»
#include «…» search starts here:
#include <…> search starts here:
/opt/x-tools/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/4.9.4/include
/opt/x-tools/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/4.9.4/include-fixed
/opt/x-tools/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/4.9.4/../../../../x86_64-linux-gnu/include
/opt/x-tools/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/include
End of search list.
# 1 «<stdin>»
# 1 «<built-in>»
# 1 «<command-line>»
# 1 «/opt/x-tools/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/include/stdc-predef.h» 1 3 4
# 1 «<command-line>» 2
# 1 «<stdin>»
COMPILER_PATH=/opt/x-tools/x86_64-linux-gnu/libexec/gcc/x86_64-linux-gnu/4.9.4/:/opt/x-tools/x86_64-linux-gnu/libexec/gcc/x86_64-linux-gnu/4.9.4/:/opt/x-tools/x86_64-linux-gnu/libexec/gcc/x86_64-linux-gnu/:/opt/x-tools/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/4.9.4/:/opt/x-tools/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/:/opt/x-tools/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/4.9.4/../../../../x86_64-linux-gnu/bin/
LIBRARY_PATH=/opt/x-tools/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/4.9.4/:/opt/x-tools/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/4.9.4/../../../../x86_64-linux-gnu/lib/../lib64/:/opt/x-tools/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/lib/../lib64/:/opt/x-tools/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/lib/../lib64/:/opt/x-tools/x86_64-linux-gnu/lib/gcc/x86_64-linux-gnu/4.9.4/../../../../x86_64-linux-gnu/lib/:/opt/x-tools/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/lib/:/opt/x-tools/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/lib/
COLLECT_GCC_OPTIONS=’-v’ ‘-E’ ‘-shared-libgcc’ ‘-mtune=generic’ ‘-march=x86-64’

