Ошибка при загрузке общих библиотек: cv2.so с использованием php exec() для приложения C++. в веб-приложении

Я использую Apache 2 с LAMP на Debian 7.0.0. Я создаю приложение C++, которое включает в себя openCV-2.4.0 с использованием CodeBlocks 10.05. Когда я изначально запустил исполняемый файл, я получил следующее сообщение

error while loading shared libraries: cv2.so: cannot open shared object file: No such file or directory

Я исправил эту проблему, скопировав cv2.so в /usr/local/lib, поместив

LD_LIBRARY_PATH=/usr/local/lib ; export LD_LIBRARY_PATH

в файл.bashrc моего домашнего каталога и работает

. .bashrc

в моем домашнем каталоге. Тем не менее, приложения LAMP запускаются с www-данными как пользователь, и поэтому неудивительно, что когда я запустил приложение в Интернете с помощью php exec(), я снова получил сообщение об ошибке

error while loading shared libraries: cv2.so: cannot open shared object file: No such file or directory

Не ясно, как я могу решить эту проблему, так как не было бы домашнего каталога с файлом.bashrc для www-данных.

1 ответ

Вы можете попробовать поставить линию в /etc/profile или другое общесистемное местоположение (/etc/bashrc вероятно, не будет работать, так как Apache, вероятно, не запускается BASH.) Вам может потребоваться перезапустить Apache и / или компьютер для распространения этого изменения.

Тем не мение, LD_LIBRARY_PATH является одной из наиболее неправильно используемых переменных среды, и тот факт, что вам нужен он для запуска этого исполняемого файла, вероятно, является признаком более серьезной проблемы, скорее всего, ваш исполняемый файл не связан должным образом, OpenCV не установлен должным образом или ваша система не установлена. не настроен правильно.

Учитывая, что у вас установлен OpenCV в /usr/localЯ собираюсь предположить, что вы скомпилировали и установили его самостоятельно. Есть ли у вас основания полагать, что версия, упакованная в репозитории Debian, является недостаточной / слишком старой? Если нет, я бы порекомендовал удалить вашу копию с /usr/local и установка пакета libcv-dev (sudo apt-get install libcv-dev.) Затем попробуйте перекомпилировать ваш исполняемый файл и посмотрите, работает ли он без LD_LIBRARY_PATH хак. Вам также потребуется перекомпилировать и переустановить все, что вы скомпилировали, что зависит от OpenCV (если есть).

Другие вопросы по тегам