2015-11-12 5 views
-3

TL; DR Программа работает в одной системе. В домашней системе он зависает перед достижением главной точки входа (проверяется с помощью отладчика).Программа C компилируется без ошибок, но не запускается и не дает никаких предупреждений или ошибок


У меня есть локальный репозиторий кода для проекта группы, синхронизированные до последней версии, что я опробована на нескольких других машин (в том числе Linux, Windows и Mac), что я уверен, что будет работать, не давая какой-либо неприятные ошибки. Это довольно простая программа, основная техническая проблема, с которой мы столкнулись, связана с SDL2, что было довольно легко.

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

Я убедился, что соединение внешних библиотек в gcc работает правильно, и из этого нет никаких предупреждений или ошибок. Конечная ссылка на файлы .o также является ошибкой и предупреждением.

Я заново установил все соответствующие .DLL (в этом случае единственная DLL - это SDL) для программы, в которой я работаю, как в логических местах системы, так и в рабочем каталоге скомпилированных исполняемых файлов , Я убедился, что .LLL - это правильные битовые версии и даже попытались использовать неправильные версии бит в случае, если я случайно сделал версию, которая нуждалась в других версиях бит.

Я переустановил мой компилятор (который я получаю от Msys2 на данный момент), и я попытался использовать компилятор, который приходит из Mingw64.

Ничто из этого не имеет никакого значения. Когда я иду запускать исполняемый файл, ничего не произойдет. Никакой процесс не создается, и любое окно терминала, из которого я его запускаю, будет просто зависать, пока я не закрою его (он не будет отвечать на ctrl-c).

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

Эта проблема началась совершенно случайно. Я пришел домой из своего университета, работая над кодом, прежде чем я пошел в университет в тот день и оставил его в компилируемом состоянии, вернулся домой, сделал хит, и он не побежал. Это было еще до того, как я вытащил те изменения, которые мы совершили, и подтолкнул этот день, поэтому я полностью потерял то, почему именно это скомпилируется так счастливо, но абсолютно отказывается работать в любых условиях.

+3

Добро пожаловать в переполнение стека! Пожалуйста, отредактируйте свой вопрос, чтобы включить [mcve]. Это поможет сообществу Stack Overflow, прояснив проблему. – Mogsdad

+2

Возможно, это ваша среда, а не ваш конкретный код. Если вы создадите простой «Hello, World!» программа, она работает для вас? –

+0

intererest: [Есть ли способ, с помощью которого программа C/C++ может сбой перед main()?] (Http://stackoverflow.com/questions/2518415/is-there-any-way-acc-program-can-crash -before-main) – bolov

ответ

1

Если отладчик не достигает основной точки входа, то наиболее вероятным виновником, о котором я могу думать, является static initialization fiasco, что согласуется с поведением, которое вы описываете: работает в одной системе, терпит неудачу на другом.

Не видя никакого кода, мы просто бросаем стрелы в темноте.

C против C++:

Статическая инициализация облом относится к C++ только, но имейте в виду, что библиотеки, даже библиотеки, связанные с программой C может содержать C++ код (не обязательно разоблачен как интерфейс).

Обязательно проверьте Is there any way a C/C++ program can crash before main()?.

@JohnBollinger имеет отличный комментарий: проверьте, работает ли простая программа (скомпилированная с тем же компилятором &). Мы когда-нибудь погружаемся в то, что, по нашему мнению, проблема, мы можем легко пропустить такие вещи.

Другое, что вы можете сделать, это использовать ldd, чтобы узнать, связаны ли правильные библиотеки с вашей программой.

+0

Это проблема C++, хотя ... – EOF

+0

@EOF не читал тег 'C' .... удалит ответ .... – bolov

+0

Ну, может быть, теги неверны. –

Смежные вопросы