I'm trying to understand how Linux works and how to build modules.
При сборке модулей ядра не используются «стандартные» каталоги компилятора C; вместо этого см. /lib/modules/$(uname -r)/build
.
C программы не знают, где искать заголовки и библиотеки; препроцессор C и компилятор делают. Вы можете увидеть стандартные включаемые каталоги, используя
gcc -xc -E -v - < /dev/null
(замена -xc
на -xc++
для C++ )и каталоги поиска библиотеки с использованием
gcc -print-search-dirs
Конфликты не избегаются компилятором; это зависит от того, кто или кто запускает компилятор, чтобы убедиться, что пути поиска не содержат конфликтующих заголовков. Библиотеки не подключаются автоматически, вам нужно добавить библиотеки в команду компоновщика -строку(-lprocps
в вашем примере ); любая другая библиотека игнорируется. В обоих случаях при возникновении конфликтов компиляция и/или компоновка останавливаются с ошибкой.