Как запустить программу C++, использующую PDCurses, на других компьютерах?

Недавно я начал использовать PDCurses в игре на C++, над которой работаю. Когда я компилирую программу на своей машине (Windows) и запускаю .exe, все работает как надо.

Когда я переношу этот .exe на другой компьютер, на котором нет PDCurses, и пытаюсь запустить его, я получаю сообщение об отсутствующем файле pdcurses.dll.

Проведя небольшое исследование в Интернете, я обнаружил, что включение файла .dll вместе с .exe должно заставить его работать, но у меня это не сработало.

Вот как я скомпилировал программу с помощью MinGW: g++ game.cpp -o game -lpdcurses

Итак, мой вопрос: как заставить эту программу работать на компьютерах, на которых не установлена ​​программа PDCurses, а также есть ли способ сделать это, объединив .exe с любыми дополнительными файлами, которые необходимы системе для запуска? программа? Я также читал, что вы можете сделать какую-то статическую ссылку, но до сих пор я не смог найти способ сделать это.

Заранее спасибо за помощь.

ПРИМЕЧАНИЕ. Если это имеет значение, я устанавливаю PDCurses, следуя этому руководству: http://comptb.cects.com/1848-adding-pdcurses-to-mingw Не уверен, что это лучший способ сделать это, но я могу скомпилировать и запустить код C++, использующий pdcurses, на моем компьютере.


Извините, что не публикую точные сообщения. Они здесь:

Первый, который я получил, когда не включил файл pdcurses.dll вместе с исполняемым файлом, сказал:

Запуск программы невозможен, так как на вашем компьютере отсутствует файл pdcurses.dll. Попробуйте переустановить программу, чтобы решить эту проблему.

Второй я получил после включения pdcurses.dll:

*Программа не может запуститься, так как на вашем компьютере отсутствует libcc_s_dw2-1.dll. Попробуйте переустановить программу, чтобы решить эту проблему.*


person Luis Medina    schedule 24.08.2011    source источник
comment
Что означает не работает? Какие именно сообщения об ошибках вы получаете?   -  person Roland Illig    schedule 24.08.2011
comment
Под работой я подразумеваю, что он вообще не работает. Я просто выдаю ошибку об отсутствующем файле pdcurses.dll   -  person Luis Medina    schedule 24.08.2011
comment
А что произойдет, если вы скопируете файл pdcurses.dll в ту же папку, что и файл game.exe? Тогда это должно работать.   -  person Roland Illig    schedule 24.08.2011
comment
Когда я попытался это сделать, это больше не выдавало мне ошибку о pdcurses.dll, но выдавало другую ошибку о другом отсутствующем файле .dll. Знаете ли вы, как я мог бы скомпилировать программу и одновременно связать ее с .dll?   -  person Luis Medina    schedule 24.08.2011
comment
Нет, я не знаю, как это сделать, но теперь информации достаточно, чтобы другие могли решить эту проблему. :)   -  person Roland Illig    schedule 24.08.2011
comment
Вам просто нужно поместить другую отсутствующую .dll в каталог приложения. Наверное. Конечно, если бы вы действительно знали, что это за dll (она четко названа в диалоговом окне ошибки, которое вам просто нужно прочитать), то мы могли бы оказать вам лучшую помощь.   -  person David Heffernan    schedule 24.08.2011
comment
Вы можете просто использовать конфигурацию ghost++, чтобы отключить использование pdcurses. первые несколько строк файла cfg. При этом он будет действовать просто как обычные консольные приложения.   -  person Prix    schedule 24.08.2011
comment
хотел сказать Нравится на ответ выше. Другой способ для вас - скомпилировать его с помощью Visual Studio вместо этого, я сделал это обоими способами, и он отлично работает с VS без каких-либо зависимостей для него.   -  person Prix    schedule 24.08.2011


Ответы (2)


Вам нужно включить все динамические библиотеки, с которыми вы связаны. Будьте осторожны с лицензированием, хотя IIRC мало что вас укусит с MinGW.

Должна быть команда «ldd», если у вас есть оболочка MinGW. Попробуйте запустить его на game.exe, и он скажет вам, какие библиотеки вам нужны для запуска вашей программы. Вам нужно включить их все вместе с exe.

Если вы хотите попытаться удалить кошмар зависимостей, вы можете использовать параметр статической привязки (-static) к вашей команде gcc link. Возможно, вы не сможете этого сделать, если у вас не установлены статические версии ваших библиотек. Это имеет и другие последствия: ваш исполняемый файл будет больше, а общий код общей страницы ОС не будет работать, потому что он не может определить, какие части (код DLL) вы используете совместно с другими приложениями. В результате ваше приложение будет использовать больше памяти, хотя это может быть незначительно.

person Adam Hawes    schedule 25.08.2011

Другой вариант — загрузить исходники в PDCurses и скомпилировать его как статическую библиотеку. Таким образом, вам не нужно ввязываться в ад DLL.

Скомпилируйте его как библиотеку C вместо библиотеки C++, и все будет готово.

person EvilTeach    schedule 05.10.2013