У меня есть приложение, которое полагается на Qt, GDCM и VTK, с основной строительной средой является Qt. Все эти библиотеки являются кросс-платформенными и компилируются в Windows, Mac и Linux. Мне нужно развернуть приложение в Linux после развертывания в Windows. Версии vtk и gdcm, которые я использую, являются версиями trunk от git (около месяца), более поздними, чем то, что я могу получить apt-get на Ubuntu 11.04, который является моим текущим (и единственным) местом развертывания Linux.
Каков приемлемый метод развертывания приложения, использующего эти библиотеки?
Должен ли я статически ссылаться сюда, чтобы избежать LD_LIBRARY_PATH? Я вижу конфликтующие отчеты по LD_LIBRARY_PATH; такие как этот позволяют предположить, что это "правильный путь", чтобы изменить путь к библиотеке для использования разделяемых библиотек при перезагрузке системы. Другие предложить, что я никогда не должен устанавливать LD_LIBRARY_PATH. В версии GDCM по умолчанию установка уже помещает библиотеки в каталог /usr/local/lib
, поэтому эти библиотеки видны при запуске ldd <my program>
. С другой стороны, VTK помещает свои библиотеки в /usr/local/lib/vtk-5.9
, который не является частью LD_LIBRARY_PATH на большинстве пользовательских машин, и поэтому не найден, если в систему не внесены какие-либо изменения. Копирование файлов VTK в '/usr/local/lib' не позволяет 'ldd' видеть файлы.
Итак, как я могу заставить мое приложение видеть VTK для использования библиотек?
В окнах развертывание DLL очень просто, потому что я могу просто включить их в установщик, и приложение находит их, потому что они находятся в локальном каталоге. Этот подход не работает в Linux, поэтому я собираюсь установить пользователей Qt, GDCM и VTK из любого подходящего источника и использовать местоположения по умолчанию, а затем указать, что приложение указывает на эти местоположения по умолчанию. Однако, поскольку VTK помещает вещи в нестандартное место, должен ли я также ожидать, что пользователи изменят LD_LIBRARY_PATH? Должен ли я включать конкретные версии библиотек, которые я хочу, а затем выяснить, как сделать исполняемый файл в локальном каталоге для этих библиотек и игнорировать те, которые он находит в пути к библиотеке?