Я не могу запустить программу на C ++ в Debian (Ubuntu), которая работает в Redhat (Centos)

TLDR: возникли проблемы при компиляции программы на C ++, которая работала в Centos Redhat в Ubuntu Debian. Есть ли что-то, что я должен знать между этими двумя, что сделает программу C ++, скомпилированную с использованием одного и того же компилятора, не работает?

Здравствуйте, я пытаюсь скомпилировать и запустить Germline (http://www1.cs.columbia.edu/~gusev/germline/). Он прекрасно работает в RedHat Centos, но поскольку Centos не так поддерживается, как Ubuntu для большинства вещей, которые я переключил. И сейчас эта программа не работает. Вполне возможно, что он использует какую-то функциональность только для RedHat, но я использую один и тот же компилятор (g ++) для компиляции в обеих средах.

Я дергал себя за волосы, просто пытаясь заставить эту штуку работать на Ubuntu, так как с ней гораздо приятнее работать, но на данный момент, когда я «сделаю все» для проекта в Ubuntu, он скомпилируется и тесты будут крутиться (Дон никогда не закончить) навсегда. Независимо от того, какие двоичные файлы я использую (скомпилированные в Centos и скопированные, неудачные тестовые двоичные файлы, которые я только что упомянул и т. Д.), Программа просто всегда зависает.

Вроде долго, прости. Мой главный вопрос заключается в следующем: есть ли другие альтернативы компилятора C ++, которые я могу попробовать? Есть ли библиотеки Red-hat C ++, которые я мог бы пропустить. Или серьезные различия в их реализациях на C ++, которые могут вызвать это?

10

Решение

Я посмотрел на программное обеспечение. Его входной код немного хрупок, и я не уверен, что в этом случае глючит библиотека C ++ в Ubuntu или Red Hat, но программа может быть легко исправлена ​​для работы с обоими.

В файле PEDIndividualsExtractor.cppв функции void PEDIndividuasExtractor::loadInput()измените строку:

while (!stream.eof() )

чтобы:

while (stream)

и перекомпилировать.

6

Другие решения

Использование while(!stream.eof()) это распространенная ошибка Если заявление stream.eof() Это правда, то это не обязательно означает, что последняя операция с потоком прошла успешно.

Вот несколько скриптов bash для компиляции пакета с GNU g++4.6:

wget http://www1.cs.columbia.edu/~gusev/germline/germline-1-5-1.tar.gz
tar -xzvf germline-1-5-1.tar.gz
cd germline-1-5-1/
perl -p -i.bak -e's/!stream\.eof\(\)/stream/g' PEDIndividualsExtractor.cpp
perl -p -i.bak -e's/!stream_sample.eof\(\)/stream_sample/g' HMIndividualsExtractor.cpp
make all
cat test/generated.out
2

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

Любой приличный пакет поставляется со списком зависимостей, вы проверили это и проверили требования?

В отсутствие требований и списка зависимостей хорошим правилом в этой ситуации является проверка самой первой ошибки и ее исправление. Например, если первая ошибка говорит «отсутствует foolib.h», то вам нужно установить «foolib» для этой машины.

1

  1. Делать make all как собственный шаг, затем проверьте, что все скомпилировано в порядке.
  2. Бежать make tests, затем проверьте, какие тесты не пройдены.

Это ваши первые шаги, и они могут помочь вам в этом.

Как сказано выше в PenguinCoder, вам нужно убедиться, что версии компилятора одинаковы для Ubuntu и Redhat. Каждый раз, когда в основной версии gccУ меня были некоторые (незначительные) проблемы.

1

Если вам нужно использовать программу только в Ubuntu, вы можете настроить программу с помощью --static скомпилировать статический исполняемый файл, а затем скопировать исполняемый файл в Ubuntu.

Или вы можете использовать ldd командовать выяснить .so файлы динамический исполняемый файл, связанный с и скопировать эти .so файлы в тот же каталог динамического исполняемого файла и поместите их в Ubuntu для запуска. Вы также можете положить .so файлы в другом каталоге и использовать LD_LIBRARY_PATH чтобы помочь исполняемому файлу найти .so файлы.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector