У меня проблемы с библиотекой (libpng), которую мое приложение динамически связывает в Linux.
Используемая версия libpng - libpng15. Так как мое приложение также связывает DI-GUY, который связывает libpng3, эти 2 версии конфликтуют. Под "clash" я имею в виду, что компоновщик (ldd) выбирает libpng3 вместо libpng15.
Если я посмотрю на вывод ldd, в списке указаны и libpng15, и libpng3. Порядок следующий:
libpng.so.3 => ../lib/libpng.so.3 (0x00007f4bccdff000)
libpng15.so.15 => ../lib/libpng15.so.15 (0x00007f4bc5d1b000)
В CMake я проверяю, что я ссылаюсь на 15, а именно:
add_library(PNG::Shared SHARED IMPORTED)
set_target_properties(PNG::Shared PROPERTIES
IMPORTED_LOCATION ${_IMPORT_PREFIX}/lib/libpng15.so.15.4.0
INTERFACE_INCLUDE_DIRECTORIES ${_IMPORT_PREFIX}/include
INTERFACE_LINK_LIBRARIES z
)
Насколько я понимаю, приложение должно взять libpng15, но, поскольку libpng.so.3 в ldd выше версии 15, компоновщик выбирает libpng.so.3.
Как можно заставить мое приложение использовать libpng15.so.15, а библиотека DI-GUY будет использовать libpng.so.3. Так как я не могу перекомпилировать DI-GUY, я застрял с libpng.so.3, который также связан, но его не следует путать с версией 15 ...
Что я не понимаю, так это почему libpng.so.3 даже рассматривается, так как я явно ссылаюсь на libpng15.so.15.4.0