Какие именно заголовчные файлы используются при компиляции?
От: prrt  
Дата: 19.09.22 13:58
Оценка:
В main.cpp (Linux) подключаю единственный заголовочный файл:
#include <openssl/ssl.h>

Компилирую c gcc с опцией -I/usr/local/ssl/include
Рассчитываю, что компилятор при компиляции будет использовать заголовочные файлы из /usr/local/ssl/include/openssl. Но так ли это, как это проверить?
Пробовал использовать strace, чтобы посмотреть, какие именно файлы читаются в процессе компиляции:
> strace -o out.txt -e trace=open -f make build

Но что-то не работает, в результатах вообще нет файла ssl.h.'

Т.е. как узнать полные пути всех заголовочных файлов, которые компилятор использует при компиляции проекта?
Re: Какие именно заголовчные файлы используются при компиляции?
От: DiPaolo Россия  
Дата: 19.09.22 14:06
Оценка: +1
Можно попробовать сказать компилятору https://stackoverflow.com/questions/11946294/dump-include-paths-from-g
Патриот здравого смысла
Re[2]: Какие именно заголовчные файлы используются при компиляции?
От: prrt  
Дата: 19.09.22 16:05
Оценка:
Здравствуйте, DiPaolo, Вы писали:

DP>Можно попробовать сказать компилятору https://stackoverflow.com/questions/11946294/dump-include-paths-from-g

> g++ -E -x c++ -v /dev/null

#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/7
 /usr/include/c++/7/x86_64-suse-linux
 /usr/include/c++/7/backward
 /usr/lib64/gcc/x86_64-suse-linux/7/include
 /usr/local/include
 /usr/lib64/gcc/x86_64-suse-linux/7/include-fixed
 /usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/include
 /usr/include
End of search list.

Здесь gcc показывает, в каких директориях и в какой последовательности он ищет заголовочные файлы. Мне же важно понять, из какой именно директории gcc использовал заголовочные файлы при компиляции конкретного проекта. Почему возник вопрос. Я был уверен, что компиляция с флагом -I/usr/local/ssl/include гарантированно заставит компилятор использовать файлы из /usr/local/ssl/include. Но когда я компилировал проект командой
> strace -o out.txt -e trace=open,read -f make build

то лог показал, что было обращение к файлу /usr/include/openssl/ssl.h , а не к /usr/local/ssl/include/openssl/ssl.h
А при компиляции другого проекта вообще не было обращений ни к какому ssl.h.
Т.е., как я понимаю,
> g++ -E -x c++ -v /dev/null

не даёт ответа на вопрос, какие именно заголовочные файлы использовались при компиляции именно конкретного данного проекта.
Re[3]: Какие именно заголовчные файлы используются при компиляции?
От: DiPaolo Россия  
Дата: 19.09.22 16:21
Оценка:

-H Print the name of each header file used, in addition to other
normal activities. Each name is indented to show how deep in
the #include stack it is. Precompiled header files are also
printed, even if they are found to be invalid; an invalid
precompiled header file is printed with ...x and a valid one
with ...! .

Патриот здравого смысла
Re[4]: Какие именно заголовчные файлы используются при компиляции?
От: prrt  
Дата: 19.09.22 22:19
Оценка:
Здравствуйте, DiPaolo, Вы писали:


DP>

DP>-H Print the name of each header file used, in addition to other
DP> normal activities. Each name is indented to show how deep in
DP> the #include stack it is. Precompiled header files are also
DP> printed, even if they are found to be invalid; an invalid
DP> precompiled header file is printed with ...x and a valid one
DP> with ...! .

О, это то, что надо! Надо мне лучше читать описание опций. Благодаря этой опции нашел, откуда у меня в одном месте лез include файл не оттуда.

Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.