Я работаю над приложением, в котором есть «ядро» и несколько плагинов. Я использую Qt в Linux и использую систему загрузки плагинов Qt. Плагины создаются как общие объектные файлы (* .so) и загружаются динамически. Если я ссылаюсь на библиотеку с помощью плагина, а эта библиотека ссылается на дополнительные библиотеки, я часто получаю ошибку «неопределенный символ» из приложения. Чтобы обойти это, мне нужно связать плагин с дополнительными библиотеками ...
Плагин связывает с LibA
LibA ссылки на LibB, LibC
LibA скомпилирован как статический. Когда я пытаюсь загрузить плагин, я получаю неопределенную символьную ошибку, например:
unable to load shared library 'myPluginName.so':
myPluginName.so: undefined symbol: _ZN3BlahBlahD2Ev
Чтобы исправить это, я могу воспользоваться фильтром, чтобы разобрать имя символа, выяснить, к какой lib принадлежит символ (скажем, LibB), а затем скомпилировать как:
Плагин связывает с LibA, LibB
LibA ссылается на LibB, LibC
Я не знаю, почему возникает ошибка. Если LibA ссылается на LibB и LibC, почему плагин должен «знать» и о LibB? Почему эта ошибка не возникает во всех случаях (т.е. нет ошибок, связанных с неопределенными символами в LibC)?
Буду признателен за любой вклад.
-kf