У меня есть исполняемый файл в Linux - exe
Этот исполняемый файл содержит некоторые функции, которые используются в коде:
Затем я хочу динамически загрузить .so
, который обеспечивает дополнительную функциональность для моего исполняемого файла.
В этой общей библиотеке я включаю заголовки для sendMsg
и debugPrint
.
Я загружаю эту общую библиотеку с dlopen()
и создаю API с dlsym()
.
Однако на dlopen()
я использую RTLD_NOW
для разрешения всех символовво время загрузки.
Не удается указать, что он не может найти символ sendMsg
.
Этот символ должен находиться в исполняемом файле, поскольку sendMsg.c
скомпилирован там.
Однако , мой исполняемый файл удален процессом make
.Таким образом, имело бы смысл, что dlopen
не может найти символ.
Как я могу решить эту ситуацию?
- Я мог бы встроить общие функции в статическую библиотеку и связатьэта статическая библиотека в
exe
и .so
.Это увеличило бы размер кода: ( - Я мог бы удалить зачистку
exe
, чтобы можно было найти символы - Сделайте некоторую магию компоновки во время компиляции, о которой я не знаю, поэтому
.so
знает, где находятся символы exe