Русское сообщество по скриптингу

BADFILE статус скомпилированного Hello World плагина  [Решено]

Все вопросы по скриптингу для Metamod, помощь в редактировании плагинов.
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для
Metamod.


Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник плагина.

BADFILE статус скомпилированного Hello World плагина

Сообщение Explain » 08 июн 2023, 17:13

Добрый день.

Скачал с официального репозитория Вы должны зарегистрироваться, чтобы видеть ссылки., скомпилировал с помощью лежащего внутри make-файла и хочу запустить Hello World плагин. Компиляция плагина проходит успешно, но при наборе команды meta list получаю в ответ вот такое:
description stat pend file vers src load unlod
<helloworld.so> badf load helloworld.so v - ini - -


Соответственно и сам плагин не работает. Нашёл вот такое описание статуса (badf из второй строки цитаты выше):
The plugin file couldn't be found, or it
doesn't appear to be a valid Metamod plugin.


Код плагина:
Код: Выделить всё
#include <extdll.h>
#include <meta_api.h>

plugin_info_t info = {
    META_INTERFACE_VERSION,              // ifvers
    "HELLO WORLD",                       // name
    "1.0",                               // version
    "2011/01/15",                        // date
    "Explain",                           // author
    "http://127.0.0.1/",              // url
    "HELLOWORLD",                        // logtag, all caps please
    PT_ANYTIME,                          // (when) loadable
    PT_ANYPAUSE                          // (when) unloadable
};

enginefuncs_t g_engfuncs;

void WINAPI GiveFnptrsToDll(enginefuncs_t* pengfuncsFromEngine, globalvars_t *pGlobals)
{
    memcpy(&g_engfuncs, pengfuncsFromEngine, sizeof(enginefuncs_t));
}

C_DLLEXPORT int Meta_Query(char *interfaceVersion, plugin_info_t **pinfo, mutil_funcs_t *pMetaUtilFuncs)
{
    *pinfo = &info;
    SERVER_COMMAND("echo [HELLOWORLD]: meta_query");
    ALERT(at_console, "[HELLOWORLD]: meta_query\n");
    return(TRUE);
}

C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, meta_globals_t *pMGlobals, gamedll_funcs_t *pGamedllFuncs)
{
    SERVER_COMMAND("echo [HELLOWORLD]: meta_attach");
    ALERT(at_console, "[HELLOWORLD]: meta_attach\n");
    return(TRUE);
}

C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason)
{
    SERVER_COMMAND("echo [HELLOWORLD]: meta_detach");
    ALERT(at_console, "[HELLOWORLD]: meta_detach\n");
    return(TRUE);
}
 


Makefile для сборки плагина:
Код: Выделить всё
#(C)2004-2005 AMX Mod X Development Team
# Makefile written by David "BAILOPAN" Anderson

HLSDK = ../metamod-p/hlsdk
METAMOD 
= ../metamod-p/metamod
M_INCLUDE 
= /usr/include/x86_64-linux-gnu/
CPP_DIR = .

OPT_FLAGS = -O2 -funroll-loops --pipe -fomit-frame-pointer -fno-strict-aliasing -std=c++11
DEBUG_FLAGS 
= --ggdb3
CPP 
= g++
NAME = main

BIN_SUFFIX_32 
= amxx_i386.so
BIN_SUFFIX_64 
= amxx_amd64.so

OBJECTS 
= $(CPP_DIR)/main.cpp

LINK 
= 

INCLUDE 
= -I. -I/usr/include/x86_64-linux-gnu/c++/11 -I$(M_INCLUDE)/ -I$(HLSDK)/public -I$(HLSDK)/common -I$(HLSDK)/dlls -I$(HLSDK)/engine -I$(HLSDK)/pm_shared -I$(METAMOD)

GCC_VERSION := $(shell $(CPP) -dumpversion >&| cut -b1)

ifeq "$(GCC_VERSION)" "4"
    OPT_FLAGS += -fvisibility=hidden -fvisibility-inlines-hidden
endif

ifeq "$(DEBUG)" "true"
    BIN_DIR = Debug
    CFLAGS 
= $(DEBUG_FLAGS)
else
    BIN_DIR = Release
    CFLAGS 
= $(OPT_FLAGS)
endif

CFLAGS += -DNDEBUG -Wall -Wno-char-subscripts -Wno-unknown-pragmas -Wno-write-strings -Wno-deprecated -Wno-non-virtual-dtor -fno-exceptions -DHAVE_STDINT_H -fno-rtti -static-libgcc -m32 -Dlinux -D__linux__

ifeq 
"$(AMD64)" "true"
    BINARY = $(NAME)_$(BIN_SUFFIX_64)
    CFLAGS += -DPAWN_CELL_SIZE=64 -DHAVE_I64 -m64 
else
    BINARY = $(NAME)_$(BIN_SUFFIX_32)
    CFLAGS += -DPAWN_CELL_SIZE=32 -DJIT -DASM32
    OPT_FLAGS 
+= -march=i586
endif

OBJ_LINUX := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o)

$(
BIN_DIR)/%.o: %.cpp
    
$(CPP) $(INCLUDE) $(CFLAGS) -$@ -$<

all:
    mkdir -$(BIN_DIR)/$(CPP_DIR)
    $(MAKE) $(NAME)

amd64:
    $(MAKE) all AMD64=true

$(NAME): $(OBJ_LINUX)
    $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY)

debug:    
    
$(MAKE) all DEBUG=true

default: all

clean
:
    rm -rf $(BIN_DIR)/*.o
    rm -rf $(BIN_DIR)/$(NAME)_$(BIN_SUFFIX_32)
    rm -rf $(BIN_DIR)/$(NAME)_$(BIN_SUFFIX_64)


Компилирую под Linux. Прошу помочь разобраться. У самого рука в таких вещах не набита, пока смотрю в сторону make-файлов, возможно проблема в том, что собираю плагин в отличающейся от metamod-p конфигурации.
Аватара пользователя
Explain
 
Сообщения: 265
Зарегистрирован: 10 дек 2010, 08:57
Откуда: Северск
Благодарил (а): 58 раз.
Поблагодарили: 6 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++
Pawn
Haskell

Re: BADFILE статус скомпилированного Hello World плагина

Сообщение Fedcomp » 08 июн 2023, 18:29

У metamod для его плагинов можно verbose логи включить чтобы он точнее писал что именно у него не получилось. Кроме того hlds 32 битный, а у тебя я вижу x86_64 в Makefile. Hlds, metamod и все плагины 32 битные.
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4944
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 816 раз.
Поблагодарили: 1319 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Re: BADFILE статус скомпилированного Hello World плагина  [Решено]

Сообщение Explain » 08 июн 2023, 20:34

Попробовал использовать 32 битные версии системных зависимостей, но появились ошибки компиляции, которые победить пока не удалось. Однако нашёл другой способ, который мне кажется должен использоваться во всех гайдах для начинающих: в репозитории метамода есть папка с примером плагина вместе с make-файлом. Просто скопипастил директорию, всё скомпилировалось и запустилось без проблем.

Спасибо в любом случае, теперь буду держать в голове, что на такое надо обращать внимание.
Аватара пользователя
Explain
 
Сообщения: 265
Зарегистрирован: 10 дек 2010, 08:57
Откуда: Северск
Благодарил (а): 58 раз.
Поблагодарили: 6 раз.
Опыт программирования: Больше трех лет
Языки программирования: C++
Pawn
Haskell

Re: BADFILE статус скомпилированного Hello World плагина

Сообщение Fedcomp » 09 июн 2023, 10:08

Explain, Вы должны зарегистрироваться, чтобы видеть ссылки. вот я тут тренировался с cmake собирать метамод плагин, успешно.

Главное сабмодули гита подтяни.
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4944
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 816 раз.
Поблагодарили: 1319 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1