Raised This Month: $49 Target: $400
 12% 

Solved Compiling extension with self-compiled libprotobuf is causing crashes on LINUX


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
TheDS1337
Veteran Member
Join Date: Jun 2012
Old 05-03-2019 , 16:36   Compiling extension with self-compiled libprotobuf is causing crashes on LINUX
Reply With Quote #1

Hello modders!

First of all, I've already created the thread yesterday on github, I'm just reposting the issue here as I thought it would get more visibility because not everybody verify github as much as the forums, anyways...

my problem is that I'm making an extension, I mostly test i on windows with bots but I test it on my friend's linux server occasionally because the final extension will run on a linux server. I've followed the instructions here: https://wiki.alliedmods.net/Compiling_libprotobuf

The problem arises with protobuf, I've compiled protobuf 2.5.0 for CSGO, both linux and windows, both release and debug.

It works very fine in windows, however in linux it crashes at certain functions, this code for example is causing the crash now:

PHP Code:
void UM_HudText(int *clientsint clientsCountint channelfloat posXfloat posYColor color1Color color2int effectfloat fadeInTimefloat fadeOutTimefloat holdTimefloat fxTime, const char *buffer)
{
    if( !
buffer )
    {
        return;
    }

    
CONSOLE_DEBUGGER("Called!");

    static 
int msgId = -1;

    if( 
msgId == -)
    {
        
msgId usermsgs->GetMessageIndex("HudMsg");
    }

    
CONSOLE_DEBUGGER("Trying to get msg...");
    
CCSUsrMsg_HudMsg *msg = (CCSUsrMsg_HudMsg *) usermsgs->StartProtobufMessage(msgIdclientsclientsCountUSERMSG_BLOCKHOOKS);

    if( 
msg )
    {
        
CONSOLE_DEBUGGER("Got msg");

        
CONSOLE_DEBUGGER("Trying to set channel...");
        
msg->set_channel(channel 0xFF);
        
        
CONSOLE_DEBUGGER("Trying to set pos...");
        
CMsgVector2D *pos msg->mutable_pos();
        
pos->set_x(posX);
        
pos->set_y(posY);

        
CONSOLE_DEBUGGER("Trying to set clr1...");
        
CMsgRGBA *clr msg->mutable_clr1();
        
clr->set_r(color1.r());
        
clr->set_g(color1.g());
        
clr->set_b(color1.b());
        
clr->set_a(color1.a());
        
        
CONSOLE_DEBUGGER("Trying to set clr2...");
        
clr msg->mutable_clr2();
        
clr->set_r(color2.r());
        
clr->set_g(color2.g());
        
clr->set_b(color2.b());
        
clr->set_a(color2.a());

        
CONSOLE_DEBUGGER("Trying to set effect...");
        
msg->set_effect(effect); CONSOLE_DEBUGGER("Trying to set fade in...");
        
msg->set_fade_in_time(fadeInTime); CONSOLE_DEBUGGER("Trying to set fade out...");
        
msg->set_fade_out_time(fadeOutTime); CONSOLE_DEBUGGER("Trying to set hold time...");
        
msg->set_hold_time(holdTime); CONSOLE_DEBUGGER("Trying to set fx time...");
        
msg->set_fx_time(fxTime); CONSOLE_DEBUGGER("buffer: %s"buffer);
        
msg->set_text(buffer); CONSOLE_DEBUGGER("Ending msg...."); // CRASHES HERE

        
usermsgs->EndMessage();

        
CONSOLE_DEBUGGER("Msg sent");
    }

    
CONSOLE_DEBUGGER("Call ended!");

Basically it's a copy-paste from the SM version here: https://github.com/alliedmodders/sou...dtext.cpp#L313

And this line is causing the crash: msg->set_text(buffer); according to the outputs from CONSOLE_DEBUGGER, note that I cannot debug it because it's a hosted server.

This is using the self compiled libprotobuf.a, now if I try and use the one shipped with HL2SDK-CSGO it compiles fine, but I get this error on run time (when I type sm exts list):

HTML Code:
> undefined symbol: _ZNK6google8protobuf7Message11GetTypeNameB5cxx11Ev
This only happens on linux, I'm doing the compilation on a virtual machine running Ubuntu 18.04.2

Here's my AMBuilder:
PHP Code:
# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python:
import ossys

class SDK(object):
  
def __init__(selfsdkextaDefnameplatformdir):
    
self.folder 'hl2sdk-' dir
    self
.envvar sdk
    self
.ext ext
    self
.code aDef
    self
.define name
    self
.platform platform
    self
.name dir
    self
.path None # Actual path

WinOnly = ['windows']
WinLinux = ['windows''linux']
WinLinuxMac = ['windows''linux''mac']

PossibleSDKs = {
  
'episode1':  SDK('HL2SDK''1.ep1''1''EPISODEONE'WinLinux'episode1'),
  
'ep2':  SDK('HL2SDKOB''2.ep2''3''ORANGEBOX'WinLinux'orangebox'),
  
'css':  SDK('HL2SDKCSS''2.css''6''CSS'WinLinuxMac'css'),
  
'hl2dm':  SDK('HL2SDKHL2DM''2.hl2dm''7''HL2DM'WinLinuxMac'hl2dm'),
  
'dods'SDK('HL2SDKDODS''2.dods''8''DODS'WinLinuxMac'dods'),
  
'sdk2013'SDK('HL2SDK2013''2.sdk2013''9''SDK2013'WinLinuxMac'sdk2013'),
  
'tf2':  SDK('HL2SDKTF2''2.tf2''11''TF2'WinLinuxMac'tf2'),
  
'l4d':  SDK('HL2SDKL4D''2.l4d''12''LEFT4DEAD'WinLinuxMac'l4d'),
  
'nucleardawn'SDK('HL2SDKND''2.nd''13''NUCLEARDAWN'WinLinuxMac'nucleardawn'),
  
'l4d2'SDK('HL2SDKL4D2''2.l4d2''15''LEFT4DEAD2'WinLinuxMac'l4d2'),
  
'darkm':  SDK('HL2SDK-DARKM''2.darkm''2''DARKMESSIAH'WinOnly'darkm'),
  
'swarm':  SDK('HL2SDK-SWARM''2.swarm''16''ALIENSWARM'WinOnly'swarm'),
  
'bgt':  SDK('HL2SDK-BGT''2.bgt''4''BLOODYGOODTIME'WinOnly'bgt'),
  
'eye':  SDK('HL2SDK-EYE''2.eye''5''EYE'WinOnly'eye'),
  
'csgo'SDK('HL2SDKCSGO''2.csgo''21''CSGO'WinLinuxMac'csgo'),
  
'portal2':  SDK('HL2SDKPORTAL2''2.portal2''17''PORTAL2', [], 'portal2'),
  
'blade':  SDK('HL2SDKBLADE''2.blade''18''BLADE'WinLinux'blade'),
  
'insurgency':  SDK('HL2SDKINSURGENCY''2.insurgency''19''INSURGENCY'WinLinuxMac'insurgency'),
  
'contagion':  SDK('HL2SDKCONTAGION''2.contagion''14''CONTAGION'WinOnly'contagion'),
  
'bms':  SDK('HL2SDKBMS''2.bms''10''BMS'WinLinux'bms'),
  
'doi':  SDK('HL2SDKDOI''2.doi''20''DOI'WinLinuxMac'doi'),
}

def ResolveEnvPath(envfolder):
  if 
env in os.environ:
    
path os.environ[env]
    if 
os.path.isdir(path):
      return 
path
    
return None

  head 
os.getcwd()
  
oldhead None
  
while head != None and head != oldhead:
    
path os.path.join(headfolder)
    if 
os.path.isdir(path):
      return 
path
    oldhead 
head
    head
tail os.path.split(head)

  return 
None

def Normalize
(path):
  return 
os.path.abspath(os.path.normpath(path))

class 
ExtensionConfig(object):
  
def __init__(self):
    
self.sdks = {}
    
self.binaries = []
    
self.extensions = []
    
self.generated_headers None    
    self
.mms_root None
    self
.sm_root None
    self
.csgo_sdk None
    
  
@property
  def tag
(self):
    if 
builder.options.debug == '1':
      return 
'Debug'
    
return 'Release'

  
def detectSDKs(self):
    
sdk_list builder.options.sdks.split(',')
    
use_all sdk_list[0] == 'all'
    
use_present sdk_list[0] == 'present'

    
for sdk_name in PossibleSDKs:
      
sdk PossibleSDKs[sdk_name]
      if 
builder.target_platform in sdk.platform:
        if 
builder.options.hl2sdk_root:
          
sdk_path os.path.join(builder.options.hl2sdk_rootsdk.folder)
        else:
          
sdk_path ResolveEnvPath(sdk.envvarsdk.folder)
        if 
sdk_path is None or not os.path.isdir(sdk_path):
          if 
use_all or sdk_name in sdk_list:
            
raise Exception('Could not find a valid path for {0}'.format(sdk.envvar))
          continue
        if 
use_all or use_present or sdk_name in sdk_list:
          
sdk.path Normalize(sdk_path)
          
self.sdks[sdk_name] = sdk
          
if sdk_name == 'csgo':
            
self.csgo_sdk sdk.path

    
if len(self.sdks) < 1:
      
raise Exception('At least one SDK must be available.')

    if 
builder.options.sm_path:
      
self.sm_root builder.options.sm_path
    
else:
      
self.sm_root ResolveEnvPath('SOURCEMOD18''sourcemod-1.8')
      if 
not self.sm_root:
        
self.sm_root ResolveEnvPath('SOURCEMOD''sourcemod')
      if 
not self.sm_root:
        
self.sm_root ResolveEnvPath('SOURCEMOD_DEV''sourcemod-central')
        
      
# Added this because of my environmental setup
      
if not self.sm_root:
        
self.sm_root ResolveEnvPath('SOURCEMOD15''')

    if 
not self.sm_root or not os.path.isdir(self.sm_root):
      
raise Exception('Could not find a source copy of SourceMod')
    
self.sm_root Normalize(self.sm_root)

    if 
builder.options.mms_path:
      
self.mms_root builder.options.mms_path
    
else:
      
self.mms_root ResolveEnvPath('MMSOURCE110''mmsource-1.10')
      if 
not self.mms_root:
        
self.mms_root ResolveEnvPath('MMSOURCE''metamod-source')
      if 
not self.mms_root:
        
self.mms_root ResolveEnvPath('MMSOURCE_DEV''mmsource-central')
    
    
# Added this because of my environmental setup
      
if not self.mms_root:
        
self.mms_root ResolveEnvPath('MMSOURCE19''')

    if 
not self.mms_root or not os.path.isdir(self.mms_root):
      
raise Exception('Could not find a source copy of Metamod:Source')
    
self.mms_root Normalize(self.mms_root)

  
def configure(self):
    
cxx builder.DetectCompilers()

    if 
cxx.like('gcc'):
      
self.configure_gcc(cxx)
    
elif cxx.vendor == 'msvc':
      
self.configure_msvc(cxx)

    
# Optimizaiton
#   if builder.options.opt == '1':
#     cxx.defines += ['NDEBUG']

    # Debugging
    
if builder.options.debug == '1':
      
cxx.defines += ['DEBUG''_DEBUG']

    
# Platform-specifics
    
if builder.target_platform == 'linux':
      
self.configure_linux(cxx)
    
elif builder.target_platform == 'mac':
      
self.configure_mac(cxx)
    
elif builder.target_platform == 'windows':
      
self.configure_windows(cxx)

    
# Finish up.
    
cxx.includes += [
      
os.path.join(self.sm_root'public'),
    ]

  
def configure_gcc(selfcxx):
    
cxx.defines += [
      
'stricmp=strcasecmp',
      
'_stricmp=strcasecmp',
      
'_snprintf=snprintf',
      
'_vsnprintf=vsnprintf',
      
'HAVE_STDINT_H',
      
'GNUC',
    ]
    
cxx.cflags += [
      
'-pipe',
      
'-fno-strict-aliasing',
      
'-Wall',
      
#'-Werror',
      
'-Wno-unused',
      
'-Wno-switch',
      
'-Wno-array-bounds',
      
'-msse',
      
'-m32',
      
'-fvisibility=hidden',
    ]
    
cxx.cxxflags += [
      
'-std=c++11',
      
'-fno-exceptions',
      
'-fno-threadsafe-statics',
      
'-Wno-non-virtual-dtor',
      
'-Wno-overloaded-virtual',
      
'-fvisibility-inlines-hidden',
    ]
    
cxx.linkflags += ['-m32']

    
have_gcc cxx.vendor == 'gcc'
    
have_clang cxx.vendor == 'clang'
    
if cxx.version >= 'clang-3.6':
      
cxx.cxxflags += ['-Wno-inconsistent-missing-override']
    if 
have_clang or (cxx.version >= 'gcc-4.6'):
      
cxx.cflags += ['-Wno-narrowing']
    if 
have_clang or (cxx.version >= 'gcc-4.7'):
      
cxx.cxxflags += ['-Wno-delete-non-virtual-dtor']
    if 
cxx.version >= 'gcc-4.8':
      
cxx.cflags += ['-Wno-unused-result']

    if 
have_clang:
      
cxx.cxxflags += ['-Wno-implicit-exception-spec-mismatch']
      if 
cxx.version >= 'apple-clang-5.1' or cxx.version >= 'clang-3.4':
        
cxx.cxxflags += ['-Wno-deprecated-register']
      else:
        
cxx.cxxflags += ['-Wno-deprecated']
      
cxx.cflags += ['-Wno-sometimes-uninitialized']

    if 
have_gcc:
      
cxx.cflags += ['-mfpmath=sse']

    if 
builder.options.opt == '1':
      
cxx.cflags += ['-O3']

  
def configure_msvc(selfcxx):
    if 
builder.options.debug == '1':
      
cxx.cflags += ['/MTd']
      
cxx.linkflags += ['/NODEFAULTLIB:libcmt']
    else:
      
cxx.cflags += ['/MT']
    
cxx.defines += [
      
'_CRT_SECURE_NO_DEPRECATE',
      
'_CRT_SECURE_NO_WARNINGS',
      
'_CRT_NONSTDC_NO_DEPRECATE',
      
'_ITERATOR_DEBUG_LEVEL=0',
    ]
    
cxx.cflags += [
      
'/W3',
    ]
    
cxx.cxxflags += [
      
'/EHsc',
      
'/GR',
      
'/TP',
    ]
    
cxx.linkflags += [
      
'/MACHINE:X86',
      
'kernel32.lib',
      
'user32.lib',
      
'gdi32.lib',
      
'winspool.lib',
      
'comdlg32.lib',
      
'advapi32.lib',
      
'shell32.lib',
      
'ole32.lib',
      
'oleaut32.lib',
      
'uuid.lib',
      
'odbc32.lib',
      
'odbccp32.lib',
      
'legacy_stdio_definitions.lib'
    
]

    if 
builder.options.opt == '1':
      
cxx.cflags += ['/Ox''/Zo']
      
cxx.linkflags += ['/OPT:ICF''/OPT:REF']

    if 
builder.options.debug == '1':
      
cxx.cflags += ['/Od''/RTC1']

    
# This needs to be after our optimization flags which could otherwise disable it.
    # Don't omit the frame pointer.
    
cxx.cflags += ['/Oy-']

  
def configure_linux(selfcxx):
    
cxx.defines += ['_LINUX''POSIX']
    
cxx.linkflags += ['-Wl,--exclude-libs,ALL''-lm']
    if 
cxx.vendor == 'gcc':
      
cxx.linkflags += ['-static-libgcc']
    
elif cxx.vendor == 'clang':
      
cxx.linkflags += ['-lgcc_eh']

  
def configure_mac(selfcxx):
    
cxx.defines += ['OSX''_OSX''POSIX']
    
cxx.cflags += ['-mmacosx-version-min=10.5']
    
cxx.linkflags += [
      
'-mmacosx-version-min=10.5',
      
'-arch''i386',
      
'-lstdc++',
      
'-stdlib=libstdc++',
    ]
    
cxx.cxxflags += ['-stdlib=libstdc++']

  
def configure_windows(selfcxx):
    
cxx.defines += ['WIN32''_WINDOWS']
    
  
def ConfigureForExtension(selfcontextcompiler):
    
compiler.cxxincludes += [
      
os.path.join(context.currentSourcePath),
      
os.path.join(context.currentSourcePath'sdk'),
      
os.path.join(self.sm_root'public'),
      
os.path.join(self.sm_root'public''extensions'),
      
os.path.join(self.sm_root'sourcepawn''include'),
      
os.path.join(self.sm_root'public''amtl'),
      
os.path.join(self.sm_root'public''amtl''amtl'),
    ]
    return 
compiler

  def ConfigureForHL2
(selfbinarysdk):
    
compiler binary.compiler

    
if sdk.name == 'episode1':
      
mms_path os.path.join(self.mms_root'core-legacy')
    else:
      
mms_path os.path.join(self.mms_root'core')

    
compiler.cxxincludes += [
      
os.path.join(mms_path),
      
os.path.join(mms_path'sourcehook'),
    ]

    
defines = ['SE_' PossibleSDKs[i].define '=' PossibleSDKs[i].code for i in PossibleSDKs]
    
compiler.defines += defines

    paths 
= [
      [
'public'],
      [
'public''engine'],
      [
'public''game''server'],
      [
'public''mathlib'],
      [
'public''vstdlib'],
      [
'public''tier0'],
      [
'public''tier1'],
      [
'game''shared'],
    ]
    if 
sdk.name == 'episode1' or sdk.name == 'darkm':
      
paths.append(['public''dlls'])
      
paths.append(['game_shared'])
    
elif sdk.name == 'csgo':
      
paths.append(['public''engine''protobuf'])
      
paths.append(['public''game''shared''csgo''protobuf'])
      
paths.append(['common''protobuf-2.5.0''src'])
    else:
      
paths.append(['public''game''server'])
      
paths.append(['public''toolframework'])
      
paths.append(['game''shared'])
      
paths.append(['common'])

    
compiler.defines += ['SOURCE_ENGINE=' sdk.code]

    if 
sdk.name in ['sdk2013''bms'] and compiler.like('gcc'):
      
# The 2013 SDK already has these in public/tier0/basetypes.h
      
compiler.defines.remove('stricmp=strcasecmp')
      
compiler.defines.remove('_stricmp=strcasecmp')
      
compiler.defines.remove('_snprintf=snprintf')
      
compiler.defines.remove('_vsnprintf=vsnprintf')

    if 
compiler.like('msvc'):
      
compiler.defines += ['COMPILER_MSVC''COMPILER_MSVC32']
    else:
      
compiler.defines += ['COMPILER_GCC']

    
# For everything after Swarm, this needs to be defined for entity networking
    # to work properly with sendprop value changes.
    
if sdk.name in ['blade''insurgency''doi''csgo']:
      
compiler.defines += ['NETWORK_VARS_ENABLED']

    if 
sdk.name in ['css''hl2dm''dods''sdk2013''bms''tf2''l4d''nucleardawn''l4d2']:
      if 
builder.target_platform in ['linux''mac']:
        
compiler.defines += ['NO_HOOK_MALLOC''NO_MALLOC_OVERRIDE']

    if 
sdk.name == 'csgo' and builder.target_platform == 'linux':
      
compiler.linkflags += ['-lstdc++']

    for 
path in paths:
      
compiler.cxxincludes += [os.path.join(sdk.path, *path)]

    if 
builder.target_platform == 'linux':
      if 
sdk.name == 'episode1':
        
lib_folder os.path.join(sdk.path'linux_sdk')
      
elif sdk.name in ['sdk2013''bms']:
        
lib_folder os.path.join(sdk.path'lib''public''linux32')
      else:
        
lib_folder os.path.join(sdk.path'lib''linux')
    
elif builder.target_platform == 'mac':
      if 
sdk.name in ['sdk2013''bms']:
        
lib_folder os.path.join(sdk.path'lib''public''osx32')
      else:
        
lib_folder os.path.join(sdk.path'lib''mac')

    if 
builder.target_platform in ['linux''mac']:
      if 
sdk.name in ['sdk2013''bms']:
        
compiler.postlink += [
          
compiler.Dep(os.path.join(lib_folder'tier1.a')),
          
compiler.Dep(os.path.join(lib_folder'mathlib.a'))
        ]
      else:
        
compiler.postlink += [
          
compiler.Dep(os.path.join(lib_folder'tier1_i486.a')),
          
compiler.Dep(os.path.join(lib_folder'mathlib_i486.a'))
        ]

      if 
sdk.name in ['blade''insurgency''doi''csgo']:
        
compiler.postlink += [compiler.Dep(os.path.join(lib_folder'interfaces_i486.a'))]
      if 
sdk.name == 'csgo':
        if 
builder.options.debug == '1':
          
compiler.linkflags.insert(0binary.Dep(os.path.join(sdk.path'lib''linux32''debug''libprotobuf.a')))
        else:
          
compiler.linkflags.insert(0binary.Dep(os.path.join(sdk.path'lib''linux32''release''libprotobuf.a')))
        
compiler.linkflags += ['-Wl,--exclude-libs=libprotobuf.a']

    
dynamic_libs = []
    if 
builder.target_platform == 'linux':
      if 
sdk.name in ['css''hl2dm''dods''tf2''sdk2013''bms''nucleardawn''l4d2''insurgency''doi']:
        
dynamic_libs = ['libtier0_srv.so''libvstdlib_srv.so']      
      
elif sdk.name in ['l4d''blade''insurgency''doi''csgo']:
        
dynamic_libs = ['libtier0.so''libvstdlib.so']
      else:
        
dynamic_libs = ['tier0_i486.so''vstdlib_i486.so']   
    
elif builder.target_platform == 'mac':
      
compiler.linkflags.append('-liconv')
      
dynamic_libs = ['libtier0.dylib''libvstdlib.dylib']
    
elif builder.target_platform == 'windows':
      
libs = ['tier0''tier1''vstdlib''mathlib']
      if 
sdk.name in ['swarm''blade''insurgency''doi''csgo']:
        
libs.append('interfaces')
      for 
lib in libs:
        
lib_path os.path.join(sdk.path'lib''public'lib) + '.lib'
        
compiler.linkflags.append(compiler.Dep(lib_path))       
      if 
sdk.name == 'csgo':
        if 
builder.options.debug == '1':
          
compiler.linkflags.insert(0binary.Dep(os.path.join(sdk.path'lib''win32''debug''vs2015''libprotobuf.lib')))
        else:
          
compiler.linkflags.insert(0binary.Dep(os.path.join(sdk.path'lib''win32''release''vs2015''libprotobuf.lib')))

    for 
library in dynamic_libs:
      
source_path os.path.join(lib_folderlibrary)
      
output_path os.path.join(binary.localFolderlibrary)

      
def make_linker(source_pathoutput_path):
        
def link(contextbinary):
          
cmd_node, (output,) = context.AddSymlink(source_pathoutput_path)
          return 
output
        
return link

      linker 
make_linker(source_pathoutput_path)
      
compiler.linkflags[0:0] = [compiler.Dep(librarylinker)]

    return 
binary

  def HL2Library
(selfcontextnamesdk):
    
binary context.compiler.Library(name)
    
self.ConfigureForExtension(contextbinary.compiler)
    return 
self.ConfigureForHL2(binarysdk)

  
def HL2Project(selfcontextname):
    
project context.compiler.LibraryProject(name)
    
self.ConfigureForExtension(contextproject.compiler)
    return 
project

  def HL2Config
(selfprojectnamesdk):
    
binary project.Configure(name'{0} - {1}'.format(self.tagsdk.name))
    return 
self.ConfigureForHL2(binarysdk)

Extension ExtensionConfig()
Extension.detectSDKs()
Extension.configure()

# Add additional buildscripts here
BuildScripts = [
  
'AMBuilder',
]

if 
builder.backend == 'amb2':
  
BuildScripts += [
    
'PackageScript',
  ]

builder.RunBuildScripts(BuildScripts, { 'Extension'Extension}) 
AMBuild:
PHP Code:
# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python:
import ossys

projectName 
'ZombieInfestation'

# smsdk_ext.cpp will be automatically added later
sourceFiles = [
  
os.path.join(Extension.csgo_sdk'public''engine''protobuf''netmessages.pb.cc'), 
  
os.path.join(Extension.csgo_sdk'public''game''shared''csgo''protobuf''cstrike15_usermessages.pb.cc'), 
  
os.path.join(Extension.csgo_sdk'public''game''shared''csgo''protobuf''cstrike15_usermessage_helpers.cpp'), 
  
os.path.join(Extension.sm_root'public''CDetour''detours.cpp'),
  
os.path.join(Extension.sm_root'public''asm''asm.c'),
  
os.path.join(Extension.sm_root'public''libudis86''decode.c'),
  
os.path.join(Extension.sm_root'public''libudis86''itab.c'),
  
os.path.join(Extension.sm_root'public''libudis86''syn-att.c'),
  
os.path.join(Extension.sm_root'public''libudis86''syn-intel.c'),
  
os.path.join(Extension.sm_root'public''libudis86''syn.c'),
  
os.path.join(Extension.sm_root'public''libudis86''udis86.c'),   
  
'extension.cpp',
  
'sdktools.cpp',
  
'gameutils.cpp',
  
'gamerules.cpp',
  
'user_messages.cpp',
  
'tempentities.cpp',
  
'macros.cpp',
  
'entity_hooker.cpp',
  
'CellRecipientFilter.cpp'
  
'hud_manager.cpp',
  
'stringtable.cpp',
  
'sound.cpp'
  
'takedamageinfo2.cpp',
  
'zi/zi_entry.cpp',
  
'zi/zi_hooks.cpp',
  
'zi/zi_core.cpp',  
  
'zi/zi_players.cpp',  
  
'zi/zi_humans.cpp',
  
'zi/zi_boss_survivor.cpp',
  
'zi/zi_human_private.cpp',
  
'zi/zi_human_hunter.cpp',
  
'zi/zi_zombies.cpp',
  
'zi/zi_boss_nemesis.cpp',
  
'zi/zi_zombie_classic.cpp',
  
'zi/zi_zombie_raptor.cpp',
  
'zi/zi_items.cpp',
  
'zi/zi_item_infinite_clip.cpp',
  
'zi/zi_item_jetpack_bazooka.cpp',
  
'zi/zi_item_antidote.cpp',
  
'zi/zi_round_modes.cpp',
  
'zi/zi_round_mode_single_infection.cpp',
  
'zi/zi_round_mode_multiple_infection.cpp',
  
'zi/zi_round_mode_swarm.cpp',
  
'zi/zi_round_mode_survivor.cpp',
  
'zi/zi_round_mode_nemesis.cpp',
  
'zi/zi_round_mode_plague.cpp',
  
'zi/zi_round_mode_armageddon.cpp',
  
'zi/zi_weapons.cpp',
  
'zi/zi_nades.cpp',
  
'zi/zi_timers.cpp',
  
'zi/zi_menus.cpp'
  
'zi/zi_commands.cpp',
  
'zi/zi_environment.cpp',  
  
'zi/zi_resources.cpp',  
  
'zi/zi_spawns_manager.cpp',  
  
'zi/zi_sourcemod_bridge.cpp',    
]

###############
# Make sure to edit PackageScript, which copies your files to their appropriate locations
# Simple extensions do not need to modify past this point.

project Extension.HL2Project(builderprojectName '.ext')

if 
os.path.isfile(os.path.join(builder.currentSourcePath'sdk''smsdk_ext.cpp')):
  
# Use the copy included in the project
  
project.sources += [os.path.join('sdk''smsdk_ext.cpp')]
else:
  
# Use the copy included with SM 1.6 and newer
  
project.sources += [os.path.join(Extension.sm_root'public''smsdk_ext.cpp')]

project.sources += sourceFiles
  
for sdk_name in Extension.sdks:
  
sdk Extension.sdks[sdk_name]
  
  
binary Extension.HL2Config(projectprojectName '.ext.' sdk.extsdk)

Extension.extensions builder.Add(project
It would be great if anyone can give me a heads up or share with me their compiled libprotobuf, the problem is complicated because I didn't find any extension other than the SM core that directly uses the UM interface. thank you!

Last edited by TheDS1337; 05-03-2019 at 18:23.
TheDS1337 is offline
Send a message via MSN to TheDS1337
asherkin
SourceMod Developer
Join Date: Aug 2009
Location: OnGameFrame()
Old 05-03-2019 , 17:49   Re: Compiling extension with self-compiled libprotobuf is causing crashes on LINUX
Reply With Quote #2

Quote:
Originally Posted by TheDS1337 View Post
if I try and use the one shipped with HL2SDK-CSGO it compiles fine, but I get this error on run time (when I type sm exts list):

HTML Code:
> undefined symbol: _ZNK6google8protobuf7Message11GetTypeNameB5cxx11Ev
You are missing this:

https://github.com/alliedmodders/sou...ript#L517-L519
__________________
asherkin is offline
TheDS1337
Veteran Member
Join Date: Jun 2012
Old 05-03-2019 , 18:23   Re: Compiling extension with self-compiled libprotobuf is causing crashes on LINUX
Reply With Quote #3

Quote:
Originally Posted by asherkin View Post
life saver! thanks a lot
TheDS1337 is offline
Send a message via MSN to TheDS1337
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 23:28.


Powered by vBulletin®
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Theme made by Freecode