На основании предыдущих ответов здесь представлено решение, которое я закончил.
Скопируйте исходный код на ВМ или другую машину. Я использовал :
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++). В случае, если он не работает:
Другие примечания:
Результат выглядит совершенно нормально.
Многие (большинство?) Реализаций ping не выполняют обратный поиск в DNS. Если вы передаете IP-адрес, он отображает IP-адрес.
В конце концов, зачем ему DNS? Для проверки связи требуется только IP-адрес. Если вы передаете имя хоста, ping выполняет поиск в DNS, чтобы получить адрес. Если вы передаете IP-адрес, ping просто использует IP-адрес.
Если вы хотите выполнить обратный поиск в DNS, используйте инструмент, предназначенный для работы с DNS, например хост 192.168.56.42
или nslookup 192.168.56.42
. Обратите внимание, что для того, чтобы машина знала имя другой машины, недостаточно установить имя в файле / etc / hosts
: это не позволит другим машинам узнать об этом. Обычный способ объявить имя машины в системах Unix (как и в большинстве других стран мира за пределами протоколов до Интернета) - это зарегистрировать его в DNS. Некоторое программное обеспечение виртуальных машин автоматически предоставляет службы DNS виртуальным машинам и обслуживает имена, объявленные в / etc / hosts
(или HOSTS.TXT
в Windows) на хосте.Если у вас нет, настройте DNS-сервер (см. этот ответ для возможного способа).
В Linux может быть способ поддержки протоколов сетевого обнаружения Windows (NetBIOS?), Но я не знаком с этим, поэтому я не могу вам сказать, как это сделать. Если это удастся заставить работать, вам, вероятно, придется установить Samba на машине Linux и настроить ее для рекламы себя в сети (Windows имеет тенденцию по умолчанию широко открыта, но Linux по умолчанию скрытно, так что вы ' Вам нужно будет активно включить трансляцию имен).