Мой проект построен на Ubuntu 14.04 в C ++ с использованием g ++.
Ранее мой проект использовал Ubuntu 14.04 для разработки. Наше программное обеспечение зависит от запуска libstdc ++ 6.
Мы предоставляем пакеты Debian для установки нашего программного обеспечения. В нашем пакете Debian устанавливаются библиотеки времени выполнения, необходимые для запуска нашего программного обеспечения. Мы не хотим устанавливать средства разработки для наших клиентов. Но поскольку libstdc ++ 6 уже установлен вместе с Ubuntu 14.04 по умолчанию, мы поэтому не указали его в «контрольном» файле пакета Debian.
В последнее время мы перешли на пакеты Debian [ ! d5]. Чтобы установить g ++ 4.9, нам нужно добавить его PPA, прежде чем запускать «apt-get install» для установки нашего программного обеспечения. Поняв, что мне также нужно использовать libstdc ++ 6, который работает с g ++ 4.9, я помещаю libstdc ++ 6 в раздел «Зависимости» файла «control». Что-то вроде этого:
Зависит: libstdc ++ 6 (Другие пакеты опущены)Когда я делаю «sudo apt-get install our-package», я понял, что libstdc + +6 НЕ обновляется до той, которую я хочу. Поэтому я получаю сообщения об ошибках во время выполнения, такие как:
Зависит: libstdc ++ 6 (Другие пакеты опущены)
/ usr / lib / x86_64-linux-gnu / libstdc ++. so.6: version `GLIBCXX_3.4.20 'not found/ usr / lib / x86_64-linux-gnu / libstdc ++. so.6: version` CXXABI_1.3.8' не найден
Я добавил g ++ 4.9 PPA в систему (ppa: ubuntu-toolchain-r / test); После добавления его я запускал «apt-get update».Я удостоверился, что:
В отличие от этого, если бы я бежал sudo apt-get install libstdc++6 вручную, libstdc ++ 6 был бы обновлен до правильного.
Моя теория заключается в том, что раздел «Зависимости» файла «control» больше похож на проверку существования, но не на версию, а поскольку Ubuntu 14.04 установил libstdc ++ 6, пакет Debian не устанавливал и не обновлял его, поскольку он мог можно найти в системе уже. Однако «apt-get install» проверил самую последнюю версию и установил ее, если отсутствует или обновил ее, если она существует.