Приложение в другой системе падает при запуске без сообщения об ошибке для 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. Пока это все, что я могу придумать. Более подробная информация поможет.