Если то содержание файла называют file1
, file2
и file3
в порядке появления затем можно сделать это со следующей остротой:
# python -c "x=open('file1').read(); y=open('file2').read(); print x in y or y in x"
True
# python -c "x=open('file2').read(); y=open('file1').read(); print x in y or y in x"
True
# python -c "x=open('file1').read(); y=open('file3').read(); print x in y or y in x"
False
я предложил бы не делать этого. Обычно легче создать двоичные файлы для различных дистрибутивов в рамках процесса создания пакета того дистрибутива. На CentOS, который использовал бы rpmbuild
.
, Так как вы имеете дело с VMs, это было бы намного более тривиально, чтобы установить CentOS 7 VM + инструменты сборки и затем сделать конструкцию пакета там.
я обычно не примыкаю к победившей стороне и редактирую другой ответ народов, но я зарабатываю свою репутацию здесь медленно, но конечно, помогая людям осознать различие между основанным на источнике распределением, которого существует 3 главных:
и основанное на двоичном файле распределение, которого существует 2 главных:
На данный момент, существует только 1 основное гибридное распределение (пересечение источника и двоичного файла):
, Нравится ли пользователям Linux это или нет, все другие дистрибутивы Linux, является детьми к одному из этих 6 родителей. Так как это сказан, мы идем дальше к следующему вопросу что:
Невозможно Смешать программное обеспечение От основанного на источнике Распределения с программным обеспечением в Двоичном Распределении
Знание, что это также означает, , если вы не знаете то, что вы делаете, вы не должны компилировать единственный пакет из источника на двоичном дистрибутиве . Существуют исключения к этому правилу:
С технической точки зрения, нет никакого различия в использовании пакета и создании из источника когда дело доходит до заключительного пакета, т.е. если можно создать пакет успешно, и это работает, никто не даст сбой вы для того, чтобы сделать его. Необходимо помнить что, когда вы делаете это, хотя, что инструменты вы раньше создавали ваше приложение на одном основанном на двоичном файле распределении, больше, чем версии инструментов, доступных в другом двоичном распределении. То, что видит OP, является дельтой или изменением, между старыми и новыми пакетами. Дельта или изменение вызываются Пакетом и Специалистами по обслуживанию ОС Каждой ОС,быть этим один из 6 выше, или дети, выбрав, какой пакет они отметят стабильный для их ОС. После того как пакет выбран в Двоичном Распределении, большинство раз он замораживается до следующего выпуска, если Критическая Ошибка не Открыта.
А основанное на источнике Распределение, с другой стороны, может принять решение обновить предметы, как только новые источники доступны, таким образом bugfixing на лету.
план выпуска, и цикл обновления для Ubuntu принял решение принять новые версии Набор инструментальных средств Сборки , прежде чем CentOS принял их. Так как CentOS основан на устойчивости, Набор инструментальных средств Сборки не может быть обновлен до их следующего главная версия . Как таковой OP испытывал выпуск , подобный этому , потому что Набор инструментальных средств Сборки Ubuntu поддерживает C++ 11, и CentOS делает, только когда все несоответствия версии восстанавливаются и позже столкнутся с проблемами с использованием нескольких Диспетчеров пакетов.
binutils
или в libtool
Binutils зависит от glibc, и libtool зависит от binutils, поэтому , libtool
косвенно зависит от glibc
, который я не объясню, почему почти каждый пакет в любой системе косвенно зависит от , glibc
просто знает, что делает. На основании предыдущих ответов здесь представлено решение, которое я закончил.
Скопируйте исходный код на ВМ или другую машину. Я использовал :
scp -R /host/path/to/src/ user@remoteHost:/remote/build/path/
Это все равно, что отправиться в путешествие, так что собирайте хорошо, соберите все исходные тексты, которые вам нужны для компиляции, за минусом общих libs и других ресурсов, которые вы можете найти на другой машине.
Перевернутая ВМ для базовой установки (centOS7 min) и обновленные инструменты, используемые для сборки моего приложения, на основе проб и ошибок (yum search, install, try build command)
yum -y update
yum -y install boost-* #probably could have used only boost-devel
yum -y install glibc-utils
yum -y install gcc-c++
yum -y install git
yum -y install libtool
yum -y install zlib-devel
yum -y install ncurses-devel
yum -y install make
yum -y install cmake
yum -y install openssl-devel
yum -y install libssh2-devel
...
Если ваш проект зависит от (более новых) библиотек, недоступных в репозитории ОС, установите из исходных текстов:
Например, мне нужны curl, собранный с помощью c-ares, и обновленная клиентская библиотека mysql.
#mysqlclient
if [[ -z $(ldconfig -p | grep libmysqlclient) ]]
then
mkdir -p "${INSTALL_PREQ_PATH}/lib/mysql/";
cd "${INSTALL_PREQ_PATH}lib/mysql/"
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
yum -y localinstall mysql-community-release-el7-5.noarch.rpm
sudo yum install mysql-community-client
sudo yum install mysql-community-devel
fi
#c-ares
if [[ -z $(ldconfig -p | grep libcares) ]]
then
mkdir -p "${INSTALL_PREQ_PATH}lib/libcares/"
cd "${INSTALL_PREQ_PATH}lib/libcares/"
git clone git://github.com/bagder/c-ares.git
cd c-ares
./buildconf
./configure
make
sudo make install
ldconfig
fi
#libcurl
if [[ -z $(ldconfig -p | grep libcares) ]]
then
mkdir -p "${INSTALL_PREQ_PATH}lib/libcurl/"
cd "${INSTALL_PREQ_PATH}lib/libcurl/"
wget http://curl.haxx.se/download/curl-7.39.0.tar.gz
tar -xvzf curl-7.39.0.tar.gz
cd curl-7.39.0
./configure --enable-ares --with-libidn --with-zlib --disable-ipv6
make
sudo make install
ldconfig
fi
Obs: Каждая сборка поставляется со своими собственными зависимостями, которые были добавлены к вышеуказанному шагу.
Проверьте, загружены ли библиотеки системой:
ldconfig # update library cache
ldconfig -p | grep libcurl # check for library
В моем случае библиотеки были установлены в папку /usr/local/lib/, которая по умолчанию не включена в путь поиска сборщика ссылок. Чтобы исправить это, выполните следующие действия:
echo "/usr/local/lib/">/etc/ld.so.conf.d/local.conf #add lib search path
ldconfig #reload library cache
Также проверьте, работают ли другие программы, использующие эту разделяемую библиотеку. В моем случае установка curl сломала yum, так как отсутствовал ssh и ssl, исправление:
rm /etc/ld.so.conf.d/local.conf #remove the new libs search path
ldconfig #reload
yum install openssl-devel #install ssl dependency
yum install libssh2-devel #install ssh dependency
cd "${INSTALL_PREQ_PATH}lib/libcurl/" #go to libcurl source path
./configure --enable-ares --with-libidn --with-zlib --disable-ipv6 --with-ssl --with-libssh2 # configure build with ssl and ssh
make #compile
sudo make install #install binary, libs and headers
echo "/usr/local/lib/">/etc/ld.so.conf.d/local.conf #add lib search path
ldconfig #reload library cache
В моем случае я использовал тот же компилятор, что и на ubuntu, gcc-c++ (g++). В случае, если он не работает:
Другие примечания: