Как установить программу в зависимости от библиотеки libstdc ++ - PullRequest
2 голосов
/ 27 апреля 2010

Моя программа написана на C ++ с использованием GCC на Ubuntu 9.10 64 bit. Если зависит от /usr/lib64/libstdc++.so.6, который фактически указывает на /usr/lib64/libstdc++.so.6.0.13. Теперь я копирую эту программу в целую систему Ubuntu 7.04 и пытаюсь ее запустить. Это не работает, как ожидалось. Затем я добавляю в каталог программы следующие файлы:

  • libstdc ++. So.6.0.13
  • libstdc ++. So.6 (ссылки на libstdc ++. So.6.0.13)

Выполнить команду:

LD_LIBRARY_PATH=. ./myprogram

Теперь все в порядке. Вопрос: как мне написать скрипт установки для такой программы? Сам файл myprogram должен быть помещен в / usr / local / bin. Что я могу сделать с зависимостями? Например, на конечном компьютере ссылка /usr/lib64/libstdc++.so.6 указывает на /usr/lib64/libstdc++.so.6.0.8. Что я могу сделать с этим?

Примечание: программа с закрытым исходным кодом, я не могу предоставить исходный код и make-файл.

Ответы [ 2 ]

3 голосов
/ 27 апреля 2010

Если вы работаете в Ubuntu, создание .deb ( Пакет Debian ) кажется правильным решением. Здесь - ссылка для начала работы.

В вашем пакете будет указано, что это зависит от некоторых других пакетов (как правило, пакетов, включающих libstdc++.so.6.0.13 - я думаю, имя пакета выглядит как libstdc++), и зависимости будут установлены при установке вашего собственного пакета с использованием dpkg -i <yourpackage>.deb .

После этого вы сможете удалить его, используя dpkg -r <yourpackage>.

В любом случае, никогда не отправляет такие стандартные файлы из вашего собственного архива. Для этой конкретной цели существуют зависимости.

Надеюсь, это поможет.

1 голос
/ 27 апреля 2010

Настоящая проблема заключается в том, что вы пытаетесь установить бинарный файл, который использует более новые версии или общие библиотеки, доступные в Ubuntu 9.10. Наилучшим вариантом должно быть сделать конкретную цель для старой Ubuntu 7.10 и скомпилировать ее со старыми библиотеками (это бэкпорт).

Затем вы должны сделать два (или более) пакета .deb, один для Ubuntu 9.10 и один для Ubuntu 7.10.

Другая возможность - продолжать делать то, что вы делаете сейчас: установите LD_LIBRARY_PATH, чтобы он указывал на желаемую версию libstdc ++ и другие необходимые библиотеки. Вы просто устанавливаете эту переменную среды в сценарии оболочки запуска. В вашем скрипте вы проверяете, доступны ли новые библиотеки или нет, и вы устанавливаете свой LB_LIBRARY_PATH (скажем, / usr / local / lib / myprogram /) только при необходимости. Но, как отмечали другие, это очень плохая практика. В любом случае, никогда не пытайтесь поместить эти предоставленные библиотеки в их стандартное место в Ubuntu 9.10, вы рискуете взломать целевую систему и вызвать проблемы с обновлением для пользователей или вашей программы, если когда-нибудь эти библиотеки будут официально перенесены.

Но если вы решите включить свой собственный набор системных библиотек, есть еще один способ пойти дальше, чем приведенный выше: просто статически связать эти библиотеки. Если программа является единственным пользователем библиотеки, как, вероятно, будет в приведенном выше сценарии, вы потеряете все преимущества использования общей динамической библиотеки, тогда зачем вообще ее использовать? А со статически связанными библиотеками вам не придется их устанавливать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...