Intereting Posts
Виртуальная машина Debian в Virtualbox медленный трафик Как скомпилировать общую библиотеку в AIX В подкаталоге, как я могу удалить все файлы размером 0 байт? Каталоги «ls -lh» сообщили о размере: Linux-диски, совместимые с CIFS Почему добавление пространства подкачки является самой медленной частью процесса загрузки? вызов bash с опцией -t Cronjob для запуска, а затем завершения Сценарий Bash Не меняющийся каталог Хороший учебник по созданию коробки KVM / Xen и советы, по которым было бы лучше Какую роль играет krb5.conf при подключении Linux-машины к AD через Samba / winbind? используя awk, чтобы разделить строку на одиночные пробелы, не кратные Почему ubuntu так медленно работает на SD-карте? Любой текстовый редактор, который перечисляет числа слов в файле? Оболочка и позиционные параметры оболочки Как я могу контролировать в реальном времени изменения в WM_NAME в браузере

Установите LD_LIBRARY_PATH правильно

Я использую Docker с изображением Ubuntu 16.04. Я использую этот docker для запуска:

  • Импорт classов C ++ в python с помощью boost.python
  • Импортируйте пакет python в Matlab с помощью Matlab Runtime (MCR).

Прежде чем я установил MCR в docker, я установил boost, используя:

$ sudo apt-get install -y libboost-all-dev 

и я смог обернуть classы C ++ и вызвать их в Python. Затем я установил MCR, и одно из требований – установить LD_LIBRARY_PATH в библиотеку Matlab.

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/MATLAB/MATLAB_Runtime/v94/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/sys/os/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/extern/bin/glnxa64 

Это сработало, я смог запустить пакет python от matlab на python, но тестирование оболочек classов C ++ не удалось из-за изменения LD_LIBRARY_PATH . Например, я получаю следующую ошибку при попытке импортировать class C ++ в python:

  /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0: undefined symbol: XML_SetHashSalt 

Если я сбросил LD_LIBRARY_PATH импорт C ++ работает, но MCR завершается ошибкой. Итак, вопрос, каким должен быть LD_LIBRARY_PATH чтобы успешно запускать как classы C ++, так и пакет Python от Matlab?

Я попытался добавить путь для повышения библиотек в LD_LIBRARY_PATH но не сработал, поэтому значение env будет:

 /usr/lib/x86_64-linux-gnu:/usr/local/MATLAB/MATLAB_Runtime/v94/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/sys/os/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/extern/bin/glnxa64 

РЕДАКТИРОВАТЬ

зависимости файла библиотеки C ++ перед установкой LD_LIBRARY_PATH :

  linux-vdso.so.1 (0x00007ffcee0dc000) libpython3.4m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0 (0x00007f9d69e59000) libboost_python-py34.so.1.55.0 => /usr/lib/x86_64-linux-gnu/libboost_python-py34.so.1.55.0 (0x00007f9d69c09000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9d698fe000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9d695fd000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9d693e7000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d6903c000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f9d68e34000) libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f9d68c0b000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9d689f0000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9d687d3000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d685cf000) libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f9d683cc000) /lib64/ld-linux-x86-64.so.2 (0x00007f9d6a6c3000) 

После настройки the LD_LIBRARY_PATH :

  linux-vdso.so.1 (0x00007ffc42e9b000) libpython3.4m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0 (0x00007fad9635b000) libboost_python-py34.so.1.55.0 => /usr/lib/x86_64-linux-gnu/libboost_python-py34.so.1.55.0 (0x00007fad9610b000) libstdc++.so.6 => /usr/local/MATLAB/MATLAB_Runtime/v94/sys/os/glnxa64/libstdc++.so.6 (0x00007fad95d8a000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fad95a89000) libgcc_s.so.1 => /usr/local/MATLAB/MATLAB_Runtime/v94/sys/os/glnxa64/libgcc_s.so.1 (0x00007fad95873000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fad954c8000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fad952c0000) libexpat.so.1 => /usr/local/MATLAB/MATLAB_Runtime/v94/bin/glnxa64/libexpat.so.1 (0x00007fad95095000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fad94e7a000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fad94c5d000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fad94a59000) libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fad94856000) /lib64/ld-linux-x86-64.so.2 (0x00007fad96bc5000) 

У вас есть несколько вариантов:

  1. Добавьте префикс к вашим разделяемым библиотекам в приведенном выше операторе export (более чем вероятно, что $LD_LIBRARY_PATH не задан в вашей системе, поэтому единственные пути, которые задаются, – это те, которые явно установлены в вашем операторе экспорта.)

     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/:/usr/lib/:/usr/lib64/:/usr/local/MATLAB/MATLAB_Runtime/v94/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/sys/os/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/extern/bin/glnxa64 

    Этот оператор export не будет постоянной частью ваших сеансов оболочки, если вы не добавите его в .bashrc fyi.

  2. Добавьте путь к библиотеке MATLAB в /etc/ld.so.conf.d/ и запустите ldconfig чтобы определить новые пути для компоновщика в вашей системе.

    (Кстати, я угадываю имя библиотеки MATLAB . Возможно, вам понадобится сделать имя файла отличным от MATLAB как все строчные буквы или что-то еще. В основном нам нужно имя библиотеки, на которое оно ссылается во время процесса компоновки. Вы можете проверить файл make, чтобы увидеть, как на него ссылаются.)

     # Add the file '/etc/ld.so.conf.d/MATLAB' with the following lines /usr/local/MATLAB/MATLAB_Runtime/v94/runtime/glnxa64 /usr/local/MATLAB/MATLAB_Runtime/v94/bin/glnxa64 /usr/local/MATLAB/MATLAB_Runtime/v94/sys/os/glnxa64 /usr/local/MATLAB/MATLAB_Runtime/v94/extern/bin/glnxa64 

    Затем запустите ldconfig.

     sudo ldconfig 

    Вам может потребоваться $LD_LIBRARY_PATH переменную $LD_LIBRARY_PATH чтобы компоновщик использовал обычный системный путь поиска и выбрал новый путь поиска для MATLAB.

     unset $LD_LIBRARY_PATH 

У меня были похожие проблемы на моей рабочей станции. Чтобы обойти это, я создал папку по этому пути /usr/lib/GLops , затем извлек GL libraries из rpms Mesa и поместил их в этот каталог. Наконец, я добавил следующие строки в ~.tcshrc

 setenv LD_LIBRARY_PATH /usr/lib64/GLops/libGL.so setenv LIBGL_ALWAYS_SOFTWARE 1 setenv LIBGL_ALWAYS_INDIRECT 1 setenv LIBGL_DIR3_DISABLE 1 setenv MESA_GL_VERSION_OVERRIDE 2.1 

Путь /usr/lib64/GLops/ содержит следующие файлы:

 libGL.so libGL.so.1 libGL.so.1.2.0 libxcb.so libxcb.so.1 libxcb.so.1.1.0 

У меня есть /usr/lib64/GLops:/usr/lib/GLops в /usr/lib64/GLops:/usr/lib/GLops

Единственный способ, которым он работал для меня, – это определить LD_PRELOAD и указать его системной библиотеке. Так что моя текущая среда будет:

 LD_LIBRARY_PATH=/usr/local/MATLAB/MATLAB_Runtime/v94/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/sys/os/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/extern/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/sys/opengl/lib/glnxa64 LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libexpat.so 

Поэтому в Docker я создал файл .matlab который содержит упомянутые переменные env. Затем в dockerfile я добавил следующее:

 services: django: &django build: context: . dockerfile: ./compose/local/django/Dockerfile depends_on: - postgres volumes: - .:/app - shared_upload_tmp:/app_temp - media:/app/computation_server/media env_file: - ./.envs/.local/.django - ./.envs/.local/.postgres - ./.envs/.production/.matlab ports: - "8800:8000" command: /start