После компиляции g cc и использования его для компиляции простой c программы:
echo 'int main(){}' > dummy.c
cc dummy.c -v -Wl,--verbose &> dummy.log
grep -B4 '^ /usr/include' dummy.log
результат:
ignoring nonexistent directory "/tools/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../x86_64-pc-linux-gnu/include"
ignoring duplicate directory "/tools/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/include
но согласно Linux Из руководства 9.1 с нуля в разделе 6.25 «Убедитесь, что компилятор ищет правильные файлы заголовков:» ожидается следующее (игнорируя *linux -gnu пути ...):
#include <...> search starts here:
/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/include
/usr/local/include
/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/include-fixed
/usr/include
Что еще хуже, так это то, что
grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
это:
SEARCH_DIR("/usr/lib");
но должно быть:
SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64")
SEARCH_DIR("/usr/local/lib64")
SEARCH_DIR("/lib64")
SEARCH_DIR("/usr/lib64")
SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib")
SEARCH_DIR("/usr/local/lib")
SEARCH_DIR("/lib")
SEARCH_DIR("/usr/lib");
Я пытался добавить все пути в /etc/ld.so.conf и перекомпилировал g cc pass 2, но ничего не изменилось.
Итак, что именно определяет записи SEARCH_DIR в файле ELF?
EDIT1: Я отступил и обнаружил, что предыдущий шаг make -k clean не завершился sh, потому что отсутствует автоген, который, кажется, вообще не рассматривается в руководстве LFS 9.1.