Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Kompilacja game i source na FreeBSD 11.0 32 bit


Rekomendowane odpowiedzi

Opublikowano

TEN TEMAT JEST JUŻ MOCNO NIEAKTUALNY, WIELE RZECZY SIĘ ZGADZA ALE CZĘŚĆ TRZEBA ZROBIĆ INACZEJ, DODATKOWO

JEŚLI CHCESZ KORZYSTAĆ Z TEGO PORADNIKA MIEJ TO NA UWADZE

 

Hej, postanowiłem napisać ten poradnik gdyż powoli wersje FreeBSD 9 i 10 na których można bezproblemowo kompilować source przestały być wspierane przez developerów tego systemu. Więcej info o tym tutaj
 
Sam miałem z tym problem ale udało mi się i chciałbym się podzielić tą wiedzą z innymi użytkownikami na mpc.
Informacje brałem z różnych źródeł. Głównie z dev'a ale także z freebsd.org i własnego doświadczenia.
Wszystko co opisałem niżej robiłem na FreeBSD 11.0 32 bit i działa bez zarzutu ale teoretycznie powinno też działać na FreeBSD 10
lecz nie testowałem tego na tej wersji systemu.
 


Tak więc zaczynamy  :lenny:
 

Jak ktoś nie ma to instalujemy system FreeBSD 11.0 z obrazu poniżej (koniecznie wersja i386 czyli 32 bitowa).
Skanu nie daje. To oficjalna strona z obrazami freebsd

ftp://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/11.0/FreeBSD-11.0-RELEASE-i386-dvd1.iso

Po zainstalowaniu systemu aktualizujemy czas na serwerze

ntpdate ntp.task.gda.pl

Aktualizujemy drzewo portów

portsnap fetch extract
portsnap fetch update

 
 
Instalujemy potrzebne pakiety potrzebne do kompilacji

(koniecznie z portów a nie przez pkg)

 
 
Biblioteka clang tylko tutaj musicie uzbroić się w naprawdę dużo cierpliwości
Instalacja tego cholerstwa :yay: trwa bardzo bardzo długo. U mnie na 2 rdzeniowym procku i 4GB ram ponad 3 godziny trwało

cd /usr/ports/lang/clang-devel && make install clean BATCH="YES"

Bibliotekę c++ (wpierającą c++11)

cd /usr/ports/devel/libc++ && make install clean BATCH="YES"
cd /usr/ports/devel/libcxxrt && make install clean BATCH="YES" 

Kompilator gmake

cd /usr/ports/devel/gmake && make install clean BATCH="YES"

Makedepend do generowania zależności

cd /usr/ports/devel/makedepend && make install clean BATCH="YES"

Dodajemy do pliku /etc/make.conf następujące zmienne

CC = clang-devel
CPP = clang-cpp-devel
CXX = clang++-devel
CFLAGS += -stdlib=libc++

 
I lecimy dalej z instalacją pakietów  :yay:

 
Biblioteka kryptograficzna Crypto++

cd /usr/ports/security/cryptopp && make install clean BATCH="YES"

Bibliotekę graficzną DevIL (potrzebne jest tylko jpg resztę możemy odznaczyć)

cd /usr/ports/graphics/devil && make install clean

Framework do c++

cd /usr/ports/devel/googletest && make install clean BATCH="YES"

Klienta mariadb (nie potrzebny tutaj serwera sam klient wystarczy)

cd /usr/ports/databases/mariadb101-client && make install clean BATCH="YES"

I na koniec instalujemy potrzebne boost'y

cd /usr/ports/devel/boost-libs && make install clean BATCH="YES"

Uwaga!

Nie wgrywamy ręcznie nic więcej oprócz rozpakowanego source kraizy.tgz nie wygramy żadnych plików do /usr/include /usr/local/include
żadnych paczek z innych poradników bo się rozjedzie. Wszystko co potrzebne już zainstalowaliśmy.
Jedyne co możemy wrzucić to liby do /usr/lib oraz /usr/lib32 (na dole tematu dam załącznik)

 

To tyle jeśli chodzi o przygotowanie samego systemu. Teraz musimy jeszcze przystosować nasze pliki źródłowe (source)
Musimy przekompilować pewne moduły jak i wygenerować nowe zależności.
 

 

 

Przygotowane paczek z source potrzebnych do kompilacji

(w tym poradniku bazuje na linii mainline_released)

 

 
[common] Edytujemy plik stl.h z katalogu

 

/usr/src/mainline_released/mainline_sg/Srcs/Server/common

Szukamy i usuwamy:

#ifdef __GNUC__
#include <ext/functional>
#endif

Szukamy:

#ifndef itertype
#define itertype(v) typeof((v).begin())
#endif

Zastępujemy tym:

#define typeof __typeof // ta definicja będzie potrzebna w innych plikach *cpp dlatego ją definiuje tutaj 
#ifndef itertype
#define itertype(v) typeof((v).begin())
#endif

 
 
[libgame] Edytujemy plik Makefile z katalogu

/usr/src/mainline_released/mainline_sg/Srcs/Server/libgame/src

Szukamy:

CXX = g++

Zastępujemy tym:

CXX = clang++-devel

Szukamy:

GCC_VERSION = $(shell $(CC) --version 2>&1 | grep "(GCC)" | cut -d' ' -f3  | cut -d'.' -f1)
 
ifeq ($(GCC_VERSION), 4)
CFLAGS = -Wall -O2 -pipe -mtune=i686 -fno-exceptions -I../include
else
CFLAGS = -Wall -O2 -pipe -mcpu=i686 -fno-exceptions -I../include
endif

Zastępujemy tym:

CFLAGS = -Wall -O2 -pipe -mtune=i686 -fno-exceptions -I../include

Zapisujemy zmiany. Następnie musimy wygenerować nowe drzewo zależności i przekompilować tą paczkę

cd /usr/src/mainline_released/mainline_sg/Srcs/Server/libgame/src
gmake clean
gmake dep
gmake

 

[libpoly] Edytujemy plik Makefile z katalogu

/usr/src/mainline_released/mainline_sg/Srcs/Server/libpoly

Szukamy:

CXX = g++

Zastępujemy tym:

CXX = clang++-devel

Szukamy:

GCC_VERSION = $(shell $(CC) --version 2>&1 | grep "(GCC)" | cut -d' ' -f3  | cut -d'.' -f1)
 
ifeq ($(GCC_VERSION), 4)
CFLAGS  = -Wall -O2 -pipe -mtune=i686 -fno-exceptions -fno-rtti
else
CFLAGS  = -Wall -O2 -pipe -mcpu=i686 -fno-exceptions -fno-rtti
endif 

Zastępujemy tym:

CFLAGS  = -Wall -O2 -pipe -mtune=i686 -fno-exceptions -fno-rtti

Zapisujemy zmiany. Następnie musimy wygenerować nowe drzewo zależności i przekompilować tą paczkę

cd /usr/src/mainline_released/mainline_sg/Srcs/Server/libpoly
gmake clean
gmake dep
gmake

 

[libserverkey] Edytujemy plik Makefile z katalogu

/usr/src/mainline_released/mainline_sg/Srcs/Server/libserverkey

Szukamy:

CXX = g++

Zastępujemy tym:

CXX = clang++-devel

Szukamy:

ifeq ($(GCC_VERSION), 4)
IFLAGS = 
CFLAGS  = $(IFLAGS) -Wall -O2 -pipe -mtune=i686 -D_THREAD_SAFE -fno-exceptions 
else
IFLAGS = 
CFLAGS  = $(IFLAGS) -Wall -O2 -pipe -mcpu=i686 -D_THREAD_SAFE -fno-exceptions 
endif

Zastępujemy tym

CFLAGS  = $(IFLAGS) -Wall -O2 -pipe -mtune=i686 -D_THREAD_SAFE -fno-exceptions 

Szukamy i usuwamy całą linijkę

GCC_VERSION = $(shell $(CC) --version 2>&1 | grep "(GCC)" | cut -d' ' -f3  | cut -d'.' -f1)

Zapisujemy zmiany. Następnie musimy wygenerować nowe drzewo zależności i przekompilować tą paczkę

cd /usr/src/mainline_released/mainline_sg/Srcs/Server/libserverkey
gmake clean
gmake dep
gmake

 

[libsql] Edytujemy plik Makefile z katalogu

/usr/src/mainline_released/mainline_sg/Srcs/Server/libsql

Szukamy:

CXX = g++

Zastępujemy tym

CXX = clang++-devel

Szukamy:

ifeq ($(GCC_VERSION), 4)
IFLAGS = -I../libmysql/7.x-5.1.35
CFLAGS  = $(IFLAGS) -Wall -O2 -pipe -mtune=i686 -D_THREAD_SAFE -fno-exceptions 
else
IFLAGS = -I../libmysql/5.x-5.1.35
CFLAGS  = $(IFLAGS) -Wall -O2 -pipe -mcpu=i686 -D_THREAD_SAFE -fno-exceptions 
endif

Zastępujemy tym:

IFLAGS = -I../libmysql/7.x-5.1.35
CFLAGS  = $(IFLAGS) -Wall -O2 -pipe -mtune=i686 -D_THREAD_SAFE -fno-exceptions 

Szukamy i usuwamy całą linijkę

GCC_VERSION = $(shell $(CC) --version 2>&1 | grep "(GCC)" | cut -d' ' -f3  | cut -d'.' -f1)

 
Zapisujemy zmiany. Następnie musimy wygenerować nowe drzewo zależności i przekompilować tą paczkę

cd /usr/src/mainline_released/mainline_sg/Srcs/Server/libsql
gmake clean
gmake dep
gmake

 

 
[libthecore] Edytujemy pierwszą linijkę w pliku Makefile z katalogu

/usr/src/mainline_released/mainline_sg/Srcs/Server/libthecore/src

Szukamy:

CC = g++

Zastępujemy tym:

CC = clang++-devel

Szukamy:

GCC_VERSION = $(shell $(CC) --version 2>&1 | grep "(GCC)" | cut -d' ' -f3  | cut -d'.' -f1)
 
ifeq ($(GCC_VERSION), 4)
CFLAGS  = -Wall -O2 -pipe -mtune=i686 -g -I$(INCLUDE)
else
CFLAGS  = -Wall -O2 -pipe -mcpu=i686 -g -I$(INCLUDE)
endif 

Zastępujemy tym:

CFLAGS  = -Wall -O2 -pipe -mtune=i686 -g -I$(INCLUDE)

Zapisujemy zmiany. Następnie musimy wygenerować nowe drzewo zależności i przekompilować tą paczkę

cd /usr/src/mainline_released/mainline_sg/Srcs/Server/libthecore/src
gmake clean
gmake dep
gmake

 
 
 
[game] Edytujemy plik char_manager.cpp z katalogu

/usr/src/mainline_released/mainline_sg/Srcs/Server/game/src

Szukamy:

#ifndef __GNUC__
#include <boost/bind.hpp>
#endif

Zastępujemy tym:

#ifndef __GNUC__
#include <boost/bind.hpp>
#endif
#undef __GNUC__

 
 
[game] Edytujemy plik stdafx.h z katalogu

/usr/src/mainline_released/mainline_sg/Srcs/Server/game/src

Szukamy:

#ifdef __GNUC__
#include <float.h>
#include <tr1/unordered_map>
#include <tr1/unordered_set>
#define TR1_NS std::tr1
#else
#include <boost/unordered_map.hpp>
#include <boost/unordered_set.hpp>
#define TR1_NS boost
#define isdigit iswdigit
#define isspace iswspace
#endif

Zastępujemy tym:

#include <float.h>
#include <unordered_map>
#include <unordered_set>
#define TR1_NS std

 
 
 

Kompilacja bazy "db"

(w tym poradniku bazuje na linii mainline_released)

 
[db] Edytujemy plik Makefile z katalogu

/usr/src/mainline_released/mainline_sg/Srcs/Server/db/src

Usuwamy całą zawartość i wklejamy to (trzeba zachować tabulatory, na dole tematu dam gotowy ten plik w razie czego)

MAKE = gmake
CC = clang++-devel

INCDIR =
LIBDIR =
BINDIR = ..
OBJDIR = .obj

GCC_VERSION = $(shell $(CC) --version 2>&1 | grep "(GCC)" | cut -d' ' -f3  | cut -d'.' -f1)
BSD_VERSION = $(shell uname -v 2>&1 | cut -d' ' -f2 | cut -d'.' -f1)
P4_VERSION = 50410
$(shell if [ ! -d $(OBJDIR) ]; then mkdir $(OBJDIR); fi)

TARGET = $(BINDIR)/db_r$(P4_VERSION)

#CFLAGS = -g -Wall -O2 -pipe -fno-rtti -fno-exceptions -pthread -D_THREAD_SAFE
CFLAGS = -Wall -D_THREAD_SAFE -pipe -msse2 -mssse3 -m32 -std=c++1z -stdlib=libc++ -Wno-invalid-source-encoding -Ofast -g0 -fexceptions
CFLAG += -Wnological-op-parentheses -Wnounused-private-field 
# boost
#INCDIR += -I../../boost

INCDIR += -I/usr/local/include
LIBDIR += -L../../libthecore/lib -L../../libpoly -L../../libsql -L../../libgame/lib
LIBDIR += -L/usr/local/lib
INCDIR += -I/usr/local/include/mysql
LIBDIR += -L/usr/local/lib/mysql

LIBS = -pthread -lm -lmd -lthecore -lmysqlclient -lsql -lpoly -lgame -lz


SRCS =	Config.cpp NetBase.cpp Peer.cpp PeerBase.cpp Main.cpp Lock.cpp DBManager.cpp \
		Cache.cpp LoginData.cpp ClientManager.cpp ClientManagerPlayer.cpp ClientManagerLogin.cpp \
		ClientManagerBoot.cpp ClientManagerParty.cpp ClientManagerGuild.cpp GuildManager.cpp HB.cpp \
		PrivManager.cpp MoneyLog.cpp ItemAwardManager.cpp ClientManagerEventFlag.cpp Marriage.cpp \
		Monarch.cpp BlockCountry.cpp ItemIDRangeManager.cpp ClientManagerHorseName.cpp version.cpp \
		AuctionManager.cpp ProtoReader.cpp CsvReader.cpp 

OBJS = $(SRCS:%.cpp=$(OBJDIR)/%.o)

default: $(TARGET)

$(TARGET): $(OBJS)
	@echo linking ...
	@$(CC) $(CFLAGS) $(LIBDIR) $(OBJS) $(LIBS) -o $(TARGET)
	@ version.cpp

$(OBJDIR)/%.o: %.cpp
	@echo compile $<
	@$(CC) $(CFLAGS) $(INCDIR) -c $< -o $@

$(OBJDIR)/version.o: version.cpp
	@$(CC) $(CFLAGS) -D__USER__=\"$(USER)\" -D__HOSTNAME__=\"$(HOSTNAME)\" -D__PWD__=\"$(PWD)\" -D__P4_VERSION__=\"$(P4_VERSION)\" -c $< -o $@
	@echo compile $<

$(OBJDIR):
	@ $(OBJDIR)

clean:
	@rm -f $(OBJS) $(BINDIR)/db_r*

dep:
	@ Depend
	makedepend -fDepend $(INCDIR) -I/usr/local/include/c++/v1 -I/usr/include/c++/v1 -p$(OBJDIR)/ $(SRCS) 2> /dev/null

sinclude Depend

Zapisujemy zmiany. Następnie musimy wygenerować nowe drzewo zależności i przekompilować db

cd /usr/src/mainline_released/mainline_sg/Srcs/Server/db/src
gmake clean
gmake dep
gmake

Kompilacja silnika "game"

(w tym poradniku bazuje na linii mainline_released)

 
[game] Edytujemy plik Makefile z katalogu

/usr/src/mainline_released/mainline_sg/Srcs/Server/game/src

Usuwamy całą zawartość i wklejamy to (trzeba zachować tabulatory, na dole tematu dam gotowy ten plik w razie czego)

PLATFORM = $(shell file /bin/ls | cut -d' ' -f3 | cut -d'-' -f1)
 
GCC_VERSION = $(shell $(CC) --version 2>&1 | grep "(GCC)" | cut -d' ' -f3  | cut -d'.' -f1)
BSD_VERSION = $(shell uname -v 2>&1 | cut -d' ' -f2 | cut -d'.' -f1)
SVN_VERSION = 50410
 
CC = clang++-devel
 
INCDIR =
LIBDIR =
BINDIR = ..
OBJDIR = OBJDIR
$(shell if [ ! -d $(OBJDIR) ]; then mkdir $(OBJDIR); fi)
 
# Standard Setting
LIBS = -pthread -lm -lmd -llua -llualib
 
# Removed -fno-rtti 
CFLAGS = -Wall -D_THREAD_SAFE -pipe -msse2 -mssse3 -m32 -stdlib=libc++ -std=c++14 -Wno-invalid-source-encoding
CFLAGS += -mtune=i686 -fstack-protector-all -Ofast -g0 -fexceptions
 
# DevIL
LIBS += -lIL -ljpeg
 
LIBDIR += -L/usr/local/lib/mysql
LIBS += -lmysqlclient -lz
 
LIBS += -lcryptopp -lgtest
 
# openssl
INCDIR += -I/usr/include
LIBS += -lssl
LIBS += /usr/lib/libssl.a
 
# Project Library
INCDIR += -I../../liblua/include
INCDIR += -I/usr/local/include
LIBDIR += -L../../libthecore/lib -L../../libpoly -L../../libsql -L../../libgame/lib -L../../liblua/lib -L../../libserverkey
LIBDIR += -L/usr/local/lib
LIBS += -lthecore -lpoly -lsql -lgame -llzo2
USE_STACKTRACE = 0
ifeq ($(USE_STACKTRACE), 1)
LIBS += /usr/local/lib/libexecinfo.a
endif
 
###########################################
 
# HackShield
INCDIR += -I../../libhackshield/include
LIBDIR += -L../../libhackshield/lib
LIBS += -lanticpxsvr
 
# XTrap
INCDIR += -I../../libxtrap/include
 
TARGET  = $(BINDIR)/game_r$(SVN_VERSION)_$(PLATFORM)
 
CFILE = minilzo.c
 
CPPFILE = BattleArena.cpp FSM.cpp MarkConvert.cpp MarkImage.cpp MarkManager.cpp OXEvent.cpp TrafficProfiler.cpp ani.cpp\
 arena.cpp banword.cpp battle.cpp blend_item.cpp block_country.cpp buffer_manager.cpp building.cpp castle.cpp\
 char.cpp char_affect.cpp char_battle.cpp char_change_empire.cpp char_horse.cpp char_item.cpp char_manager.cpp\
 char_quickslot.cpp char_resist.cpp char_skill.cpp char_state.cpp PetSystem.cpp cmd.cpp cmd_emotion.cpp cmd_general.cpp\
 cmd_gm.cpp cmd_oxevent.cpp config.cpp constants.cpp crc32.cpp cube.cpp db.cpp desc.cpp\
 desc_client.cpp desc_manager.cpp desc_p2p.cpp dev_log.cpp dungeon.cpp empire_text_convert.cpp entity.cpp\
 entity_view.cpp event.cpp event_queue.cpp exchange.cpp file_loader.cpp fishing.cpp gm.cpp guild.cpp\
 guild_manager.cpp guild_war.cpp horse_rider.cpp horsename_manager.cpp input.cpp input_auth.cpp input_db.cpp\
 input_login.cpp input_main.cpp input_p2p.cpp input_teen.cpp input_udp.cpp ip_ban.cpp\
 item.cpp item_addon.cpp item_attribute.cpp item_manager.cpp item_manager_idrange.cpp locale.cpp\
 locale_service.cpp log.cpp login_data.cpp lzo_manager.cpp marriage.cpp matrix_card.cpp\
 messenger_manager.cpp mining.cpp mob_manager.cpp monarch.cpp motion.cpp over9refine.cpp p2p.cpp packet_info.cpp\
 party.cpp passpod.cpp pcbang.cpp polymorph.cpp priv_manager.cpp pvp.cpp\
 questevent.cpp questlua.cpp questlua_affect.cpp questlua_arena.cpp questlua_ba.cpp questlua_building.cpp\
 questlua_danceevent.cpp questlua_dungeon.cpp questlua_forked.cpp questlua_game.cpp questlua_global.cpp\
 questlua_guild.cpp questlua_horse.cpp questlua_pet.cpp questlua_item.cpp questlua_marriage.cpp questlua_mgmt.cpp\
 questlua_monarch.cpp questlua_npc.cpp questlua_oxevent.cpp questlua_party.cpp questlua_pc.cpp\
 questlua_quest.cpp questlua_target.cpp questmanager.cpp questnpc.cpp questpc.cpp\
 refine.cpp regen.cpp safebox.cpp sectree.cpp sectree_manager.cpp sequence.cpp shop.cpp\
 skill.cpp start_position.cpp target.cpp text_file_loader.cpp trigger.cpp utils.cpp vector.cpp war_map.cpp\
 wedding.cpp xmas_event.cpp version.cpp panama.cpp threeway_war.cpp map_location.cpp auth_brazil.cpp\
 BlueDragon.cpp BlueDragon_Binder.cpp DragonLair.cpp questlua_dragonlair.cpp\
 HackShield.cpp HackShield_Impl.cpp char_hackshield.cpp skill_power.cpp affect.cpp\
 SpeedServer.cpp questlua_speedserver.cpp XTrapManager.cpp\
 auction_manager.cpp FileMonitor_FreeBSD.cpp ClientPackageCryptInfo.cpp cipher.cpp\
 buff_on_attributes.cpp dragon_soul_table.cpp DragonSoul.cpp\
 group_text_parse_tree.cpp char_dragonsoul.cpp questlua_dragonsoul.cpp\
 shop_manager.cpp shopEx.cpp item_manager_read_tables.cpp
 
 
COBJS = $(CFILE:%.c=$(OBJDIR)/%.o)
CPPOBJS = $(CPPFILE:%.cpp=$(OBJDIR)/%.o)
 
MAINOBJ = $(OBJDIR)/main.o
MAINCPP = main.cpp
 
default: $(TARGET)
 
$(OBJDIR)/minilzo.o: minilzo.c
@$(CC) $(CFLAGS) $(INCDIR) -c $< -o $@
@echo compile $<
 
$(OBJDIR)/version.o: version.cpp
@$(CC) $(CFLAGS) -D__USER__=\"$(USER)\" -D__HOSTNAME__=\"$(HOSTNAME)\" -D__PWD__=\"$(PWD)\" -D__SVN_VERSION__=\"$(SVN_VERSION)\" -c $< -o $@
@echo compile $<
 
$(OBJDIR)/%.o: %.cpp
@echo compile $<
@$(CC) $(CFLAGS) $(INCDIR) -c $< -o $@
 
limit_time:
@echo update limit time
@ update_limit_time.py
 
$(TARGET): $(CPPOBJS) $(COBJS) $(MAINOBJ)
@echo linking $(TARGET)....
@$(CC) $(CFLAGS) $(LIBDIR) $(COBJS) $(CPPOBJS) $(MAINOBJ) $(LIBS) -o $(TARGET)
 
clean:
@rm -f $(COBJS) $(CPPOBJS)
@rm -f $(BINDIR)/game_r* $(BINDIR)/conv
tag:
ctags *.cpp *.h *.c
 
dep:
makedepend -f Depend $(INCDIR) -I/usr/local/include/c++/v1 -I/usr/include/c++/v1 -p$(OBJDIR)/ $(CPPFILE) $(CFILE) $(MAINCPP) 2> /dev/null > Depend
 
sinclude Depend

Zapisujemy zmiany. Następnie musimy wygenerować nowe drzewo zależności i przekompilować game

cd /usr/src/mainline_released/mainline_sg/Srcs/Server/game/src
gmake clean
gmake dep
gmake


To tyle  :yay: 

 
Jeśli zrobiliście wszystko poprawnie to skompilowany silnik gry (game) pojawi się w

/usr/src/mainline_released/mainline_sg/Srcs/Server/game

a skompilowany silnik bazy "db" w

/usr/src/mainline_released/mainline_sg/Srcs/Server/db

 
 
Ten poradnik napisałem bazując na czystym source z paczki kraizy.tgz aby działało trzeba wyeliminować timebombe.
Odsyłam tutaj do poradnika użytkownika @Asparte

http://www.mpcforum.pl/topic/1288865-src-wyeliminowanie-timebomby/

 
Oraz trzeba wgrać fixa na startowanie DB. Odsyłam tutaj do poradnika użytkownika Faby z MtDev
 

 


1. Otwieramy plik


/usr/src/mainline_released/mainline_sg/Srcs/Server/db/src/main.cpp

Szukamy:


std::string g_stLocale = "euckr";

Zamieniamy na:

 


std::string g_stLocale = "latin2";

2. Otwieramy plik


/usr/src/mainline_released/mainline_sg/Srcs/Server/libsql/AsyncSQL.cpp

Szukamy:


m_stLocale = c_pszLocale;

Zamieniamy na:


m_stLocale = "latin2";

Szukamy:


void CAsyncSQL2::SetLocale(const std::string & stLocale)
{
    m_stLocale = stLocale;
    QueryLocaleSet();
}

Zamieniamy na:


void CAsyncSQL2::SetLocale(const std::string & stLocale)
{
    if(m_stLocale != stLocale)
    {
        m_stLocale = stLocale;
        QueryLocaleSet();
    }
}

3. Przechodzimy do


cd /usr/src/mainline_released/mainline_sg/Srcs/Server/libsql

4. Wpisujemy


gmake clean
gmake

5. Sprawdzamy czy w naszych plikach serwerowych mamy locale "poland"
- nazwę folderu w (...)/share/locale/ zmieniamy na "poland"
- przechodzimy do bazy danych i w common/locale zmieniamy wartość dla 'LOCALE' na "poland"

6. Kompilujemy DB.


 
 

Pobieralnia

1. Liby do FreeBSD 11 32 bit
 
Download:

https://mega.nz/#!z8MwSSZA!canCGvwGXI4tfaMYrWPw-5MUdkNxtl1t28u6yDHkNH0

Skan:

http://i.imgur.com/9DjvN7d.png

Makefile_db.txt

Makefile_game.txt

 

 

Ciekawostka nr 1 

Przy takiej konfiguracje nie potrzebujecie trzymać na maszynie całego folderu z source który waży ponad 5GB po rozpakowaniu...

Wystarczy jedynie mieć sam folder "Server" z danej linii source a waży on tylko około 50 MB :]

 

Ciekawostka nr 2

Resztę pakietów takie jak serwer mysql, www, php itd można już śmiało instalować przez pkg

 

Ciekawostka nr 3

Jeśli podczas kompilacji pojawią ci się warningi to jak znasz c++ i angielski to sobie możesz je ogarnąć bez problemu. Errory się nie pojawią więc się skompiluje.

Opublikowano

Witaj!

No dobra chciałeś zabłysnąć, ale troszkę nie zbyt zabłysnąłeś. Nie wiem ile jeszcze kolejnych tutoriali wyjdzie zanim napiszę ja porządny temat, którego ciągle ogłaszam aby nie zaśmiecać to forum.. 

Nie przyjmuj ode mnie spiny, nie chce spinać ale poniekąd piszesz same głupoty.

Osobiście jeszcze nie patrzyłem co tam w FreeBSD 11 dodali ale aż z ciekawości sprawdź swoją własną metodę unikalną, bez zmian g++ i zobaczę czy Twój poradnik się przyda czy też nie, bo warto wiedzieć czy jest dobry i polecać każdemu czy jest do bani i nie każdemu zadziała i wiedząc o tym.

 

Ciekawostka nr.1

Nie wystarczy mieć jedynie folderu Server. Widzę, nie odpaliłeś ani razu w Visual Studio plików game i wszlekie liby. Nie dla parady są tamte foldery. W Extern masz tam liby i inne fajne rzeczy :D i musi być ten folder podczas kompilacji, bo wątpię aby FreeBSD w wersji 11 miał to wszystko naraz :D i warto mieć folder Tools. Tak więc dlatego piszesz głupotę.

 

EDIT:
I tak poza tym coś mało tych libów ;) ciekawe czy serwer Ci wystartował :P bo jeśli masz org. linię z mainline_released to nie ma szans aby wystartował z Twoimi libami. No chyba że w FreeBSD dodali potrzebne owe liby np. libmd.so.5

Pomogłem ? klik up to Like ;D ( Lubię to ! ) xD

300 postów-> 10.10.2013 godz. 9:00
400 postów-> 19.10.2013 godz. 9:00

 

Opublikowano

Clang jest szybszy niż g++ to po pierwsze. Po drugie zwróć uwagę jakie biblioteki instaluje i porównaj z tymi libami które są w paczkach na forum. Po trzecie game wystartowalo bez problemu i zalogowalem sie na serwer.

 

Co do tego folderu to masz racje jesli chodzi o kompilacje klienta wtedy sa potrzebne niektore z tych folderow. Ja pokazalem tylko kompilacje game i db dla serwera.

 

Jest wiele metod do kompilacji game ja pokazalem taką akurat.

Moze twoja jest lepsza moze gorsza nie wiem nie mi oceniac. Wazne ze dziala ;)

  • 3 miesiące temu...
Opublikowano

trezeba być idiotą zeby instalować 32bitówkę bo jak sie ie myle to max 2gb ramu jest

jak już coś robisz tutaj wymawiasz ze clang lep[szy od gcc++

a sam popełniłeś błąd bo pod 32bitowke zrobiłeś pogratulować inteligencji.

 

zrób pod 64 a może skorzystam bo z 32bit to chyba gimby korzystają i na swoich slabych vps stawiają holy shit

Opublikowano
Dnia 2.09.2017 o 11:29, KaszanaLubiZryć napisał:

trezeba być idiotą zeby instalować 32bitówkę bo jak sie ie myle to max 2gb ramu jest

jak już coś robisz tutaj wymawiasz ze clang lep[szy od gcc++

a sam popełniłeś błąd bo pod 32bitowke zrobiłeś pogratulować inteligencji.

 

zrób pod 64 a może skorzystam bo z 32bit to chyba gimby korzystają i na swoich slabych vps stawiają holy shit

Hej, zauważ że kompilacja jest na 32 bitowym systemie bo tak jest prościej. Wtedy skompilowany program działa zarówno na 32 bitowym jak i docelowo na 64 bitowym systemie. Nigdzie w tym poradniku nie napisałem że warto stawiać serwer na 32 bitowym systemie... Można sobie utrudniać życie bawiąc się w kompilacje na systemie 64 bitowym (nie twierdze że nie się da) ale po co skoro tak jest szybciej (zakładam że serwera produkcyjnego nie ma się na tym samym hostingu co platformy do kompilacji)

Ps. ten poradnik jest dla początkujących którzy mają problem z kompilacją kodu source na systemach FreeBSD w wersjach wyższej niż 10.3 

Opublikowano
Dnia 3.09.2017 o 18:32, Rimmero napisał:

Hej, zauważ że kompilacja jest na 32 bitowym systemie bo tak jest prościej. Wtedy skompilowany program działa zarówno na 32 bitowym jak i docelowo na 64 bitowym systemie. Nigdzie w tym poradniku nie napisałem że warto stawiać serwer na 32 bitowym systemie... Można sobie utrudniać życie bawiąc się w kompilacje na systemie 64 bitowym (nie twierdze że nie się da) ale po co skoro tak jest szybciej (zakładam że serwera produkcyjnego nie ma się na tym samym hostingu co platformy do kompilacji)

Ps. ten poradnik jest dla początkujących którzy mają problem z kompilacją kodu source na systemach FreeBSD w wersjach wyższej niż 10.3 

Yyyyyyyyyyyyyyyyyyyyyyyyy co ma piernik do wiatraka? 
Więc twierdzisz tutaj, że jak skompiluje na 64 bitach to nie zadziała na 32 bitach? Stary tak to brzmi debilnie i amatorsko, że nigdy w życiu takich głupot nikt nie pisał..
Kolejna sprawa, utrudniać życie na 64 bitach, amatorze powiedz mi czym się różni wersja 32 od 64 a później wygaduj głupoty, totalnie się nie znasz a piszesz. 

I teraz tak, ja mam dość spore doświadczenie jeśli chodzi o FreeBSD, kiedyś mniejsze ale podszkoliłem się ale to nic. Zadaj sobie pytanie, dlaczego od samego początku powstania metina było używane gcc zamiast clanga i wyjaśnij mi czym się clang różni od gcc. 
Pisałeś, że jest szybszy a wiesz dlaczego jest szybszy clang od gcc? Jeśli tak to udowodnij mi to a później zastanów się, dlaczego metin2 nie kompilował na clangu tylko na gcc. Lepiej się zna twórca plików niż Ty, który nie wie dlaczego należy gcc używać niż clanga. 
Wersja BSD jaką się ma jest nieistotna. 

To nie jest diss. Powiedzmy nauka praktyczna. 

Pomogłem ? klik up to Like ;D ( Lubię to ! ) xD

300 postów-> 10.10.2013 godz. 9:00
400 postów-> 19.10.2013 godz. 9:00

 

Opublikowano
Dnia 10.05.2017 o 12:22, kamil2321 napisał:

Witaj!

 Nie wiem ile jeszcze kolejnych tutoriali wyjdzie zanim napiszę ja porządny temat, którego ciągle ogłaszam aby nie zaśmiecać to forum.. 

Napisz to jeszcze raz po polskiemu prosze..

Skoro umiesz to go napisz xDDDD sapy masz bo wiesz lepiej choć to co jest w tucie działa xD Fakt kilka poprawek bym dał. Ale nie wazne jak działa wazne ze działa :)

i Chuj wie co ty oglaszasz czy temat który nie istnieje czy to ze nie zasmiecac forum xD

sygna.png

  • 7 miesięcy temu...
Opublikowano

Przepraszam moderatorów za odświeżenie ale ludzie tutaj straszne głupoty piszą... @kamil2321 ty się znasz...? nie widać...
po pierwsze kod jest pisany pod 32 bity więc skompilowanie go na 64 nic nie da
po drugie, gcc obsługuje funkcje z jezyka C, ale skoro całość się skompilowała to nie powinno być żadnego problemu
po trzecie, jak skompilujesz jako 64bit to nie będzie działać na 32... no bo jak...
A co do zdziwienia tym, że twórca kompilował to na 32bitach w gcc to sprawdźcie ile lat ma kod, i dlaczego nie idzie tego skompilować np w cpp17? 


 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...