Hey, so I'm relatively new to c++ and sourcemod extension. My goal was to create a simple detour, what i had achieved. It does compile fine no errors no warnings but as soon as I try to load the compiled binary it gives me this error:
Code:
[SM] Extension GAExtension.ext.so failed to load: /home/tf2server/tf/addons/sourcemod/extensions/GAExtension.ext.so: undefined symbol: Msg
and i have no clue how to fix that
CPP:
PHP Code:
#include "extension.h"
CDetour *gamemodeUsesUpgradesDetour = NULL;
IGameConfig *g_pGameConf = NULL;
DETOUR_DECL_MEMBER0(GamemodeUsesUpgrades, bool)
{
return true;
}
bool GAEXT::SDK_OnLoad(char *error, size_t maxlength, bool late)
{
char conf_error[255] = "";
if (!gameconfs->LoadGameConfigFile("ga-tf2.games", &g_pGameConf, conf_error, sizeof(conf_error)))
{
if (conf_error[0])
{
g_pSM->Format(error, maxlength, "Could not read ga-tf2.games.txt: %s", conf_error);
}
return false;
}
CDetourManager::Init(g_pSM->GetScriptingEngine(), g_pGameConf);
gamemodeUsesUpgradesDetour = DETOUR_CREATE_MEMBER(GamemodeUsesUpgrades, "GamemodeUsesUpgrades");
if (gamemodeUsesUpgradesDetour != NULL)
{
gamemodeUsesUpgradesDetour->EnableDetour();
return true;
}
g_pSM->LogError(myself, "GamemodeUsesUpgrades detour could not be initialized");
return false;
}
void GAEXT::SDK_OnUnload()
{
if (gamemodeUsesUpgradesDetour != NULL)
{
gamemodeUsesUpgradesDetour->Destroy();
gamemodeUsesUpgradesDetour = NULL;
}
}
/**
* @file extension.cpp
* @brief Implement extension code here.
*/
GAEXT g_GarmeaExtension; /**< Global singleton for extension's main interface */
SMEXT_LINK(&g_GarmeaExtension);
Header:
PHP Code:
#ifndef _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
#define _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
/**
* @file extension.h
* @brief Sample extension code header.
*/
#include "smsdk_ext.h"
#include "CDetour/detours.h"
/**
* @brief Sample implementation of the SDK Extension.
* Note: Uncomment one of the pre-defined virtual functions in order to use it.
*/
class GAEXT : public SDKExtension
{
public:
/**
* @brief This is called after the initial loading sequence has been processed.
*
* @param error Error message buffer.
* @param maxlength Size of error message buffer.
* @param late Whether or not the module was loaded after map load.
* @return True to succeed loading, false to fail.
*/
virtual bool SDK_OnLoad(char *error, size_t maxlength, bool late);
/**
* @brief This is called right before the extension is unloaded.
*/
virtual void SDK_OnUnload();
/**
* @brief This is called once all known extensions have been loaded.
* Note: It is is a good idea to add natives here, if any are provided.
*/
//virtual void SDK_OnAllLoaded();
/**
* @brief Called when the pause state is changed.
*/
//virtual void SDK_OnPauseChange(bool paused);
/**
* @brief this is called when Core wants to know if your extension is working.
*
* @param error Error message buffer.
* @param maxlength Size of error message buffer.
* @return True if working, false otherwise.
*/
//virtual bool QueryRunning(char *error, size_t maxlength);
public:
#if defined SMEXT_CONF_METAMOD
/**
* @brief Called when Metamod is attached, before the extension version is called.
*
* @param error Error buffer.
* @param maxlength Maximum size of error buffer.
* @param late Whether or not Metamod considers this a late load.
* @return True to succeed, false to fail.
*/
//virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlength, bool late);
/**
* @brief Called when Metamod is detaching, after the extension version is called.
* NOTE: By default this is blocked unless sent from SourceMod.
*
* @param error Error buffer.
* @param maxlength Maximum size of error buffer.
* @return True to succeed, false to fail.
*/
//virtual bool SDK_OnMetamodUnload(char *error, size_t maxlength);
/**
* @brief Called when Metamod's pause state is changing.
* NOTE: By default this is blocked unless sent from SourceMod.
*
* @param paused Pause state being set.
* @param error Error buffer.
* @param maxlength Maximum size of error buffer.
* @return True to succeed, false to fail.
*/
//virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlength);
#endif
};
#endif // _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
The makefile I'm using is from
here , CDetour and asm is from
here
Thanks in advance