2016-08-02 6 views
0

У меня есть Linux-ящик, на котором я скомпилировал и установил более новую версию GCC (4.3.9), которая присутствует в/usr/lib.Неисправная зависимость от libstdC++ (GLIBCXX _...) при установке RPM

Я использовал этот компилятор для создания набора библиотек, которые я сгруппированных в 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 

Я знаю, что эти символы обеспечиваются ССАГПЗ я составил:

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 искать в нужном месте. This answer подразумевает, что LD_LIBRARY_PATH определяет, что путь поиска, но установка этого в моем .bashrc, похоже, не помогла (и я вижу, что он установлен с эхом в той же оболочке, с которой я запускаю rpm -i).

Какие переменные мне нужно установить (и где), чтобы установить установщик RPM, чтобы понять, где находится мой libstdC++?

+1

rpm проверяет зависимости в 'обеспечения' других rpms, а не на том, что установлено на вашем пути. –

ответ

2

Проблема в том, что rpm работает с «метаданными». Официальный libstdC++ 6 пакет обеспечивает:

... 
libstdc++.so.6(GLIBCXX_3.4.10) 
libstdc++.so.6(GLIBCXX_3.4.11) 
... 

обороты не начнет расследование установленного /usr/lib/libstdc++.so.6, чтобы увидеть, если он обеспечивает GLIBCXX_3.4.10. Afaik не может сказать rpm, чтобы сделать это. Я вижу несколько способов решения этой проблемы; в порядке мои предпочтения:

  1. перестраивать libstdC++ 4.3.9 RPM самостоятельно и установить его; то все зависимости будут работать отлично (вы можете посмотреть here, чтобы найти gcc * src.rpm). Как по мне; это единственное надежное решение!
  2. при упаковке my-rpm; используйте опцию AutoReqProv: no; сообщить rpm, чтобы он не автоматически сканировал свои требования. Конечно, вы можете столкнуться с проблемами зависимостей; где вам придется определять и устанавливать зависимости вручную.
  3. при установке my-rpm; используйте опцию --nodeps, чтобы игнорировать зависимости. Это может вызвать проблемы с другими зависимостями (потому что теперь все зависимостей будут игнорироваться).
+0

Вижу, спасибо за разъяснение. Я начну с попытки предложить # 1, затем – jam

+1

, как только вы начнете делать это очень просто: получите src.rpm; запустите 'rpmbuild --rebuild your.src.rpm' и установите результирующие rpms ... –