экспериментирую с 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>&1Using 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'