У меня есть окно Linux, на котором я скомпилировал и установил более новую версию GCC (4.3.9), которая присутствует в / usr / lib.
Я использовал этот компилятор для создания набора библиотек, которые я собрал в RPM, но когда я пытаюсь установить этот RPM, он выдает следующие ошибки:
rpm -ivh my-rpm.i586.rpm
error: Failed dependencies:
libstdc++.so.6(GLIBCXX_3.4.10) is needed by my-rpm.i586
libstdc++.so.6(GLIBCXX_3.4.11) is needed by my-rpm.i586
libstdc++.so.6(GLIBCXX_3.4.15) is needed by my-rpm.i586
libstdc++.so.6(GLIBCXX_3.4.20) is needed by my-rpm.i586
libstdc++.so.6(GLIBCXX_3.4.9) is needed by my-rpm.i586
Я знаю, что эти символы предоставляются компилятором gcc:
strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
...
GLIBCXX_3.4.10
GLIBCXX_3.4.11
...
GLIBCXX_3.4.15
...
GLIBCXX_3.4.20
И если я использую ldd для любого из .so файлов, упакованных в RPM, я вижу, что он ожидает правильного libstdc ++:
ldd BUILDROOT/usr/lib/libfoo.so
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7635000)
Поэтому я думаю, что моя единственная проблема заключается в том, чтобы преобразователь зависимостей RPM выглядел в нужном месте. Этот ответ подразумевает, что LD_LIBRARY_PATH определяет этот путь поиска, но установка этого в моем .bashrc, похоже, не помогла (и я вижу, что он установлен с помощью echo в той же оболочке, из которой я запускаю rpm -i).
Какие переменные мне нужно установить (и где), чтобы установщик RPM понял, где находится мой libstdc ++?
Проблема в том, что rpm
работает с «метаданными». Официальный пакет libstdc ++ 6 обеспечивает:
...
libstdc++.so.6(GLIBCXX_3.4.10)
libstdc++.so.6(GLIBCXX_3.4.11)
...
rpm не начнет изучать установленный файл /usr/lib/libstdc++.so.6, чтобы проверить, предоставляет ли он GLIBCXX_3.4.10
, Afaik нет способа сказать rpm сделать это. Я вижу несколько способов решить эту проблему; в порядке моих предпочтений:
AutoReqProv: no
; сказать rpm
не сканировать автоматически для его требований. Конечно, тогда вы можете столкнуться с проблемами зависимости; где вы должны будете определить и установить зависимости вручную.--nodeps
игнорировать зависимости. Это может вызвать проблемы с другими зависимостями (потому что сейчас все зависимости будут игнорироваться).Других решений пока нет …