Как запустить программу C ++, которая использует PDCurses на других компьютерах? - PullRequest
0 голосов
/ 24 августа 2011

Я недавно начал использовать 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 отсутствует на вашем компьютере. Попробуйте переустановить программу, чтобы решить эту проблему. *

Ответы [ 2 ]

0 голосов
/ 06 октября 2013

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

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

0 голосов
/ 25 августа 2011

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

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

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

...