Приложение в другой системе падает при запуске без сообщения об ошибке для sudo, Ошибка сегментации для non-sudo

Я написал сервер websocket++ на Ubuntu 13.10 и пытаюсь выполнить его на Linux Mint 16.

Я установил все зависимости, и первая строка под main это cout который никогда не срабатывает.

Это команда компиляции:

g++ -o Dgn Dgn.cpp ed25519-donna-master/ed25519.o 
  -Og -std=c++0x -I ~/Dgn -D_WEBSOCKETPP_CPP11_STL_ -D_WEBSOCKETPP_NO_CPP11_REGEX_ 
  -lboost_regex -lboost_system -L/usr/lib -lssl -lcrypto -pthread -lpqxx 
  -lboost_thread -ljson_spirit -lgmp -lgmpxx

Если я выполню с sudo использовать ограниченные порты, он сразу завершается неудачно, без ошибок возвращаясь в командную строку.

Если я выполню без sudoэто отпечатки Segmentation Fault и сразу выходит из командной строки.

Каталоги в ~/Dgn присутствуют в новой системе.

Я сделал быстрый простой тест и проверил, может ли базовый пример websocket++ скомпилироваться и выполнить нормально, и это было успешно.

Обе системы являются 64-битными. Разница лишь в дистрибутивах, но Linux Mint 16 основан на Ubuntu 13.10, и все команды для настройки были идентичны.

Как это можно скомпилировать так, чтобы оно могло выполняться в другой системе?


В качестве дальнейшего теста я скомпилировал его на новой системе, и он работает.

Разве невозможно скомпилировать на одной системе и запустить на другой?

GDB

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7de58da in ?? () from /lib64/ld-linux-x86-64.so.2

1 ответ

Решение

Дело в том, что cout линия никогда не срабатывает (полагаю, << std::endl) означает, что сбой происходит в конструкторе статического объекта. Самый простой способ отладки - разрешить дамп ядра (см. man limits) и проверить дамп с помощью GDB. Пока это все, что я могу придумать. Более подробная информация поможет.

Другие вопросы по тегам