Здесь рассматривается вариант компиляции PvPGN 1.8.5 с помощью Visual Studio 2005/2008/2010 под Windows. На текущий момент она является последней стабильной версией PvPGN.
Компиляция PvPGN 1.99 описана в другой статье.
Для начала надо скачать исходный код PvPGN 1.8.5, распаковать архив и открыть проект Win32-Projects\PvPGN.sln или PvPGN_Console.sln - в зависимости от того нужна GUI версия или консольная.
Если надо скомпилировать с поддержкой MySQL, необходимо скопировать заголовочные файлы MySQL (.h) в папку src\mysql\, а библиотеку (libmysql.lib) в папку src\win32\. Оставшийся libmysql.dll потребуется для запуска PvPGNConsole.exe.
Всё, описанное далее можно не выполнять, а скачать прикрепленный к статье архив с исходниками PvPGN 1.8.5, готовыми для компиляции. Просто открываете .sln проект и компилируете.
Там исправлены все ошибки и можно только заменить MySQL файлы на другую версию.
В обозревателе решений (View > Other Windows > Solution Explorer) добавить вручную следующие файлы в папки common и bnetd (в дереве проекта PvPGNConsole\Source Files\):
src\common\xstr.c
src\bnetd\sql_common.c
src\bnetd\storage_sql2.c
Так же для этого необходимо, чтобы в Project -> PvPGNConsole properties... в закладке Preprocessor был добавлен флаг WITH_SQL_MYSQL.
Далее в строке меню Build -> Configuration manager... напротив PvPGNConsole в раскрывающемся списке вместо Debug поставить Release. Иначе в конечный файл запишется Debug код, он будет в несколько раз больше обычного по размерам и чуть медленнее работать.
Закрываем окошко и вот уже последний шаг Build -> Build PvPGNConsole.
Если все прошло успешно, появится долгожданный bin\PvPGNConsole.exe
Распространенные ошибки при компиляции
Ошибка #1
Ошибка #2
Ошибка #3error C2275: `my_bool` : illegal use of this type as an expression
error C2146: syntax error : missing `;` before identifier `my_true`
error C2065: `my_true` : undeclared identifier
error C2065: `my_true` : undeclared identifier
В файле src\bnetd\sql_mysql.c нужно перенести строку "my_bool my_true = (my_bool)1;" в начало функции sql_mysql_init() (см. подробнее).
Должно получиться так:
...
static int sql_mysql_init(const char *host, const char *port, const char *socket, const char *name, const char *user, const char *pass)
{
my_bool my_true = (my_bool)1;
if (name == NULL || user == NULL) {
eventlog(eventlog_level_error, __FUNCTION__, "got NULL parameter");
return -1;
}
...
Присоединенные файлы (вирусов нет):
|