make: $ LD_RUN_PATH игнорируется - PullRequest
5 голосов
/ 08 марта 2012

Я собираю FFmpeg из исходного кода.

./configure --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-x11grab --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264
make
make install

ldd /usr/local/bin/ffmpeg дал мне это

linux-gate.so.1 =>  (0xb7717000)
libavdevice.so.53 => not found
libavfilter.so.2 => not found
libavformat.so.54 => not found
libavcodec.so.54 => not found
libpostproc.so.52 => not found
libswresample.so.0 => not found
libswscale.so.2 => not found
libavutil.so.51 => not found
libm.so.6 => /lib/i386-linux-gnu/tls/i686/nosegneg/libm.so.6 (0xb76e3000)
libpthread.so.0 => /lib/i386-linux-gnu/tls/i686/nosegneg/libpthread.so.0 (0xb76ca000)
libc.so.6 => /lib/i386-linux-gnu/tls/i686/nosegneg/libc.so.6 (0xb7569000)
/lib/ld-linux.so.2 (0xb7718000)

Установка $LD_LIBRARY_PATH в /usr/local/lib исправила ошибки "not found", но по причинам, указанным здесь , я не хочу устанавливать $LD_LIBRARY_PATH постоянно.

Я перекомпилировал те же команды, на этот раз с $LD_RUN_PATH, установленным на /usr/local/lib.
make, похоже, игнорировал $LD_RUN_PATH при компиляции.

Есть ли способ использовать $LD_RUN_PATH без внесения значительных изменений в Makefile?

Ответы [ 3 ]

6 голосов
/ 09 марта 2012

Есть ли у вас причина для компиляции двоичного файла в режиме совместного использования (например, желание создавать программное обеспечение для связи с ними)?Если статический двоичный файл 'ffmpeg' будет работать так же хорошо для вас, сконфигурируйте его без параметра --enable-shared, чтобы устранить эти зависимости.

В противном случае вам нужно будет сообщить вашей системе, где находятся общие библиотекилибо установив LD_LIBRARY_PATH в среде, добавив префикс выполнения 'ffmpeg' к LD_LIBRARY_PATH (например, "LD_LIBRARY_PATH = / usr / local / lib / usr / local / bin / ffmpeg"), либо обновите путь к вашей системной библиотеке с правильным расположением.

В самом низу страницы, на которую вы ссылались в своем посте, есть еще одно решение: "LDFLAGS = '- L / my / странный / путь / lib -Wl, -rpath / мой / странный/ путь / Библиотека».Для FFmpeg и для вашей ситуации передайте этот дополнительный параметр во время настройки:

--extra-ldflags="-L/usr/local/lib -Wl,-rpath /usr/local/lib"

И полученный двоичный файл 'ffmpeg' будет знать, где найти общие библиотеки.

Многие решения дляэтот.

3 голосов
/ 26 июля 2012
  1. Скорее всего, LD_RUN_PATH игнорируется, поскольку пакет ./configure уже поместил некоторые опции -Wl, -rpath в cmdline компоновщика (честно говоря, я сам не знаю. Я вижу здесь то же самое поведение, но я кросс-компилирую от 486 до mips32).

  2. попробуйте настроить так: ./configure LDFLAGS = "- L / your / lib -Wl, -rpath-link = / your / lib" CPPFLAGS = "- I / your / include" --prefix = / tgt ...

    Я рекомендую использовать -rpath-link вместо -rpath, если / ваш каталог отличается от / tgt

2 голосов
/ 05 апреля 2012

Для всех, кто сталкивается с этим, причина, по которой $LD_RUN_PATH не работал, могла быть вызвана этой ошибкой с компоновщиком золота.rpath как описано в ответе Майка)

...