Вы можете запускать «плагины» как дочерние процессы и взаимодействовать по IPC (совместно используемая память, каналы и т. Д.).
Они будут существовать в своем собственном пространстве процессов, поэтому вы не сможете напрямуювызывать функции в них (кроме того, если они также статически связаны, у вас не будет никаких точек входа в функцию, кроме main
, которые вы могли бы достичь), но вы могли бы (например) отправить команду по именованному каналу, илипередавать данные в структуре разделяемой памяти.
Обратите внимание, что в момент загрузки второго двоичного файла вы потеряли одно из основных преимуществ статического связывания (поскольку теперь у вас есть две загруженные копии libc
), так что вы можете рассмотреть возможность просто кусать пули и использовать динамическое связывание.При добавлении поддержки динамической компоновки вы потратите несколько сотен тысяч, но GNU libc
составляет около 2 миллионов, так что если вы загружаете один плагин, вы уже сэкономили, возможно, 1,8 миллиона;и для каждого дополнительного подключаемого модуля вы экономите около 2 млн.