Странный Erlang о драйверах C
Я хочу изучить внутреннее поведение Erlang RunTime System, чтобы внести некоторые изменения в будущем, я делаю некоторые успехи, и теперь я нахожусь на уровне драйверов Erlang, написанных на языке C, эти драйверы расположены в
/usr/ports/lang/erlang/work/otp-OTP-21-3-8-18/erts/emulator/drivers/common
в ОС FreeBSD всего 5 или 6 драйверов, поэтому я хотел скомпилировать один драйвер, просто скомпилируйте его. Поэтому я использовал компилятор Clang, поскольку он интегрирован с ОС FreeBSD, и попытался скомпилировать драйвер, этот драйвер отвечает за все сетевые задачи, такие как открытие сокетов и прием соединений ...., и я попытался включить все пути к каталогам, которые содержат включенные файлы, используемые этим драйвером, поэтому я набрал:
cc inet_drv.c
-I/usr/ports/lang/erlang/work/otp-OTP-21.3.8.18/erts/emulator/beam
-I/usr/local/lib/erlang/include
-I/usr/....
cc
- это команда Clang для компиляции программы на C, и можно добавить каталог, содержащий файлы заголовков (
.h
) компилятору, когда он проверяет наличие включаемых файлов, например, когда программа C включает файл
#include<erl_driver.h>
компилятор будет искать
erl_driver.h
в каталогах, указанных
-I
вариант.
Когда все делали и пытались скомпилировать драйвер, я был удивлен множеством предупреждений и ошибок, ПОЧЕМУ?
Поскольку сеть в Erlang работает отлично, а функция
erl_ddll:loaded_drivers()
возвращает список загруженных драйверов, например
tcp_inet
а также
udp_inet
, это означает, что
inet_drv.c
компилируется без ошибок и отлично загружается во время загрузки системы Erlang, поэтому ПОЧЕМУ он был скомпилирован с ошибками, когда я пытаюсь его скомпилировать? Я не могу найти на это ответа, я пробовал с другим драйвером, а также скомпилировал с большим количеством ошибок. Я уверен, что пропустил то, о чем хочу знать.
Я постарался, чтобы вопрос был простым и понятным, так что, пожалуйста, кто может мне помочь.