В 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.'
Т.е. как узнать полные пути всех заголовочных файлов, которые компилятор использует при компиляции проекта?
Здравствуйте, 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
не даёт ответа на вопрос, какие именно заголовочные файлы использовались при компиляции именно конкретного данного проекта.
-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 ...! .
Здравствуйте, 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 файл не оттуда.
Спасибо!