für linux kompillieren



  • hi, ich arbeite momentan mit dem vc++ .net.
    ich möchte ein plugin machen für hl2 gameserver. leider kriegich nur ne dll raus, ich brauche aber eine linux binary für auf linux gameserver!
    ich kann da nur release/debug umstellen und beim anderen feld geht nur win32, hat kein linux oder sonst was...

    ich hätte irgenmdwelche makefiles für linux, aber das kapier ich irgendwie nicht ganz 😉



  • VC++ kann nicht für Linux kompilieren. Versuch es mal lieber mit dem gcc, falls dein Code überhaupt portabel ist.



  • ja logo es gibt ja auch hl2 linux gameserver und ich hab ja die makefiles für linux und ich habe auch gcc (von dev-c++) aber ich komme irgendwie nicht ganz draus was ich mit dem make file machen soll!

    #
    # SDK Makefile for x86 Linux
    #
    #
    
    #############################################################################
    # Developer configurable items
    #############################################################################
    
    # the name of the mod binary (_i486.so is appended to the end)
    NAME=x_admin_plugin
    # the location of the vcproj that builds the mod
    MOD_PROJ=../dlls/hl_sdk.vcproj
    # the name of the mod configuration (typically <proj name>_<build type><build target>)
    MOD_CONFIG=hl_ReleaseSDKWin32
    
    # the directory the base binaries (tier0_i486.so, etc) are located
    #GAME_DIR=../../
    GAME_DIR=~/valve/hl2bin/
    
    # compiler options (gcc 3.4.1 or above is required)
    CC=/usr/local/bin/gcc
    CPLUS=/usr/local/bin/g++
    CLINK=/usr/local/bin/gcc
    CPP_LIB="/usr/local/lib/libstdc++.a /usr/local/lib/libgcc_eh.a"
    
    # put any compiler flags you want passed here
    USER_CFLAGS=
    
    # link flags for your mod, make sure to include any special libraries here
    LDFLAGS="-lm -ldl $(GAME_DIR)/bin/tier0_i486.so $(GAME_DIR)/bin/vstdlib_i486.so"
    
    # XERCES 2.6.0 or above ( http://xml.apache.org/xerces-c/ ) is used by the vcproj to makefile converter
    # it must be installed before being able to run this makefile
    XERCES_INC_DIR=/home/alfred/tmp/xerces-c-src_2_6_0/include
    XERCES_LIB_DIR=/home/alfred/tmp/xerces-c-src_2_6_0/lib
    # if you have xerces installed already you should be able to use the two lines below
    #XERCES_INC_DIR=/usr/include
    #XERCES_LIB_DIR=/usr/lib
    
    #############################################################################
    # Things below here shouldn't need to be altered
    #############################################################################
    MAKE=make
    
    # the dir we want to put binaries we build into
    BUILD_DIR=.
    # the place to put object files
    BUILD_OBJ_DIR=$(BUILD_DIR)/obj
    
    # the location of the source code
    SOURCE_DIR=..
    
    # the CPU target for the build, must be i486 for now
    ARCH=i486
    ARCH_CFLAGS=-mtune=i686 -march=pentium -mmmx -O3
    
    # -fpermissive is so gcc 3.4.x doesn't complain about some template stuff
    BASE_CFLAGS=-fpermissive -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp
    SHLIBEXT=so
    SHLIBCFLAGS=-fPIC
    SHLIBLDFLAGS=-shared -Wl,-Map,$@_map.txt -Wl
    
    #flags passed to the c compiler
    CFLAGS="$(USER_CFLAGS) $(DEFINES) $(ARCH_CFLAGS) $(BASE_CFLAGS) -Usprintf=use_Q_snprintf_instead_of_sprintf -Ustrncpy=use_Q_strncpy_instead -UPROTECTED_THINGS_ENABLE"
    
    # define list passed to make for the sub makefile
    BASE_DEFINES=CC=$(CC) CPLUS=$(CPLUS) CPP_LIB=$(CPP_LIB) \
    	BUILD_DIR=$(BUILD_DIR) BUILD_OBJ_DIR=$(BUILD_OBJ_DIR) \
    	SOURCE_DIR=$(SOURCE_DIR) SHLIBLDFLAGS=$(SHLIBLDFLAGS) SHLIBEXT=$(SHLIBEXT) \
    	CLINK=$(CLINK) CFLAGS=$(CFLAGS) LDFLAGS=$(LDFLAGS) \
    	ARCH=$(ARCH) GAME_DIR=$(GAME_DIR) MOD_CONFIG=$(MOD_CONFIG) NAME=$(NAME) \
    	XERCES_INC_DIR=$(XERCES_INC_DIR) XERCES_LIB_DIR=$(XERCES_LIB_DIR)
    
    # Project Makefile
    MAKE_MOD=Makefile.mod
    MAKE_VCPM=Makefile.vcpm
    MAKE_PLUGIN=Makefile.plugin
    
    all: check vcpm mod
    
    check:
    	if [ -z "$(CC)" ]; then echo "Compiler not defined."; exit; fi
    	if [ ! -d $(BUILD_DIR) ];then mkdir $(BUILD_DIR);fi
    	cd $(BUILD_DIR)
    
    vcpm:
    	$(MAKE) -f $(MAKE_VCPM) $(BASE_DEFINES)
    
    mod: vcpm
    	if [ ! -f "tier0_i486.so" ]; then ln -s $(GAME_DIR)/bin/tier0_i486.so .; fi
    	if [ ! -f "vstdlib_i486.so" ]; then ln -s $(GAME_DIR)/bin/vstdlib_i486.so .; fi
    	./vcpm $(MOD_PROJ)
    	$(MAKE) -f $(MAKE_MOD) $(BASE_DEFINES)
    
    plugin:
    	$(MAKE) -f $(MAKE_PLUGIN) $(BASE_DEFINES)
    
    clean:
    	 $(MAKE) -f $(MAKE_VCPM) $(BASE_DEFINES) clean
    	 $(MAKE) -f $(MAKE_PLUGIN) $(BASE_DEFINES) clean
    	 $(MAKE) -f $(MAKE_MOD) $(BASE_DEFINES) clean
    

    wennich da make und dann das file mach sagts mir es sei up to date!



  • a) sollte doch eigentlich irgendwo in der Doku drinnen stehen, was du tun must
    b) wirst du von Windows aus wohl kaum Binaries fuer ein Linux-System kompilieren koennen. Versuchs mal von Linux aus 🙂



  • 1. installier dir linux ( auf der aktuellen ct cd is glaub suse 9.3 )
    2. lie mal die kommentare im "# Developer configurable items"-Block durch
    is doch relativ selbsterklärend oder was verstehste nich?



  • Blue-Tiger schrieb:

    b) wirst du von Windows aus wohl kaum Binaries fuer ein Linux-System kompilieren koennen. Versuchs mal von Linux aus 🙂

    Warum sollte das nicht möglich sein. Ich habe es noch nie versucht, aber der gcc sollte das können.



  • Klar. Du baust dir mit den cygwin-binaries eine crosstoolchain für i686-pc-linux-gnu (oder was auch immer). Vielleicht hilft das: http://gentoo-wiki.com/HOWTO_Distcc_server_on_Windows (geht zwar um was anderes, aber auch hier wird ne crosschain gebaut)



  • theoretisch schon aber i bezweifle ob smash das mit cygwin hinbekommt

    nachdem suse installiert is sollte das makefile auf anhieb durchlaufen sobald die passenden pfade gesetzt sind

    ob XERCES da schon dabei is weiss ich ned... muss man vielleicht nachinstalliern



  • ja ich frage mich ob überhaupt gcc schon installiert ist...
    habe suse 9.2 oder so aber muss zuerst den boot loader wieder installen...
    wär mir aber lieber im windows weil ich von linux net auf die ntfs hd schreiben kann und weilich im linux auch net ins internet komme!



  • gcc is immer dabei weil man unter linux viele progs nur als quellcode bekommt
    was ntfs betrifft kannste ja einfach dein projekt auf die linux partition kopiern



  • Walli schrieb:

    Blue-Tiger schrieb:

    b) wirst du von Windows aus wohl kaum Binaries fuer ein Linux-System kompilieren koennen. Versuchs mal von Linux aus 🙂

    Warum sollte das nicht möglich sein. Ich habe es noch nie versucht, aber der gcc sollte das können.

    Nur wenn du Crosscompiling aufsetzt, und das ist nicht unbedingt trivial 😉

    Sovok schrieb:

    gcc is immer dabei weil man unter linux viele progs nur als quellcode bekommt

    Mitnichten. Ich bin mir ziemlich sicher, dass SuSE Personal Edition den gcc standardmaessig nicht installiert. Die Distro ist schliesslich fuer Endanwender, die haben mit "./configure && make && make install" - Installiererei wenig am Hut. Auch auf Server-Installationen ist der GCC aus Sicherheitsueberlegungen heraus nicht installiert.



  • Blue-Tiger schrieb:

    Mitnichten. Ich bin mir ziemlich sicher, dass SuSE Personal Edition den gcc standardmaessig nicht installiert. Die Distro ist schliesslich fuer Endanwender, die haben mit "./configure && make && make install" - Installiererei wenig am Hut. Auch auf Server-Installationen ist der GCC aus Sicherheitsueberlegungen heraus nicht installiert.

    im ernst? argh is ja übel

    für viele progs gibts ja überhaupt keine rpms



  • naja gut da ladich mir das am liebsten auf den root server hoch eigentlich...
    auf dem läuft debian und den kannich auch von windows aus steuern...
    ich hoffe nur es gibt nicht zuviel wasich da hochladen muss,
    naja halt mal im makefile schauen, wasses alles braucht

    aber make und gcc wäre drauf...



  • Blue-Tiger schrieb:

    Walli schrieb:

    Blue-Tiger schrieb:

    b) wirst du von Windows aus wohl kaum Binaries fuer ein Linux-System kompilieren koennen. Versuchs mal von Linux aus 🙂

    Warum sollte das nicht möglich sein. Ich habe es noch nie versucht, aber der gcc sollte das können.

    Nur wenn du Crosscompiling aufsetzt, und das ist nicht unbedingt trivial 😉

    Naja, aber sicherlich bequemer als für einen Compile erst ein Linux aufzusetzen.



  • Walli schrieb:

    Blue-Tiger schrieb:

    Walli schrieb:

    Blue-Tiger schrieb:

    b) wirst du von Windows aus wohl kaum Binaries fuer ein Linux-System kompilieren koennen. Versuchs mal von Linux aus 🙂

    Warum sollte das nicht möglich sein. Ich habe es noch nie versucht, aber der gcc sollte das können.

    Nur wenn du Crosscompiling aufsetzt, und das ist nicht unbedingt trivial 😉

    Naja, aber sicherlich bequemer als für einen Compile erst ein Linux aufzusetzen.

    Ich geb zu ich hab mich nur rudimentaer mit Crosscompiling beschaeftigt. Aber einfach kurz die Knoppix-CD ins Laufwerk und rebooten ist IMO recht bequem. 🙂
    (haengt dann logisch davon ab, wie oft man das tun muss)



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • also habe nun noch ein problem: wo befindet sich gcc, g++ und so?
    finde das nicht und muss das dem makefile sagen!
    installiert habich alles!

    make[1]: /usr/local/bin/g++: Command not found
    make[1]: *** [obj/plugin/serverplugin_convar.o] Error 127
    make[1]: Leaving directory `/var/www/linux_sdk'
    make: *** [plugin] Error 2

    R214167:/var/www/linux_sdk# gcc
    gcc: no input files
    R214167:/var/www/linux_sdk# g++
    g++: no input files



  • so hat mir einer geholfen bei dem vorhin, aber nun das?

    /usr/bin/g++ -I../public -I -Dstrcmpi=strcasecmp -D_alloca=alloca -w -mtune=i686 -march=pentium -mmmx -O3 -fpermissive -D_LINUX -DNDEBUG -Dstricmp=strcasecmp -D _stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp -D_snprintf=s nprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -Usprintf=u se_Q_snprintf_instead_of_sprintf -Ustrncpy=use_Q_strncpy_instead -UPROTECTED_THI NGS_ENABLE -DARCH=i486 -o obj/plugin/serverplugin_convar.o -c ../utils/serverplu gin_sample/serverplugin_convar.cpp
    cc1plus: error: invalid option tune=i686' make[1]: *** [obj/plugin/serverplugin_convar.o] Error 1 make[1]: Leaving directory/var/www/linux_sdk'
    make: *** [plugin] Error 2



  • versuchs mal mit ner anderen gcc version
    z.b. 3.4.1



  • Sovok schrieb:

    versuchs mal mit ner anderen gcc version
    z.b. 3.4.1

    Ein einfaches Reparieren der CFLAGS reicht völlig aus.
    Einfach das -mtune=i686 entfernen!


Anmelden zum Antworten