запуск бинарного файла на другом компьютере вызывает segfault - PullRequest
0 голосов
/ 22 февраля 2011

Я не очень разбираюсь в том, как происходит связывание в c ++

У меня есть бинарный файл, который я скомпилировал на одной машине, и я хотел бы скопировать его и запустить на другой машине.

Я ожидал бы, что это сработает, потому что библиотеки одинаковы на обеих машинах (я думаю!) И версия linux одинакова (то же ядро ​​и т. Д.) Однако, когда я копирую его... кажется, что происходит ошибка в одной из библиотек, которые я динамически связываю при запуске.

Он работает как масло на машине, на которой я его скомпилировал.Но на компьютере, к которому я его подключил, при запуске бинарного файла он мгновенно вызывает ошибки в std :: string :: сравнение в стеке вызовов с некоторыми функциями в одной из библиотек, которые я динамически связываю.

Я попытался установить библиотеки снова на обеих машинах и выполнить ldconfig, но результаты были те же.

есть идеи, как отлаживать подобные странные ошибки, вызванные проблемами с динамическими ссылками?

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

Ну, это может помочь сузить проблему, если вы запустите программу в отладчике. При компиляции добавьте аргументы -g -ggdb в команду g ++, затем при запуске программы используйте команду gdb ./executable (может потребоваться сначала установить gdb.) В командной строке gdb введите run, и ваша программа запустится пока это не segfaults. Тогда вы можете попытаться выяснить, что пошло не так.

Существует множество обучающих программ по использованию gdb (отладчик GNU) в Интернете.

0 голосов
/ 29 марта 2013

Звучит как проблема двоичной совместимости. Эта SO ссылка может пролить некоторый свет: Создание универсального двоичного файла в linux для всех компьютеров x86

...