[Boost] Błędy w kompilacji pod linux'em

Witam. Ten błąd jest już drugi z kolei. Poprzednio wyskakiwalo mi coś, co na innych forach znalazłem pod hasłem “linker error”, z braku umiejętności zarówno w programowaniu jak i w użytkowaniu linux’a zainstalowalem pakiet libboost-all. I teraz wyskakuje mi inny błąd :frowning:

Chciałem zaznaczyć, że nie jestem programistą, chce tylko skompilować źródła. Nic w systemie namieszane nie jest, świeżutki Debian sqeeze tuż po instalacji na vbox’ie zresztą. Zrobiłem tylko to co kazali w readme + instalacja libboost-all. Ktoś może wie o co chodzi?

xxx@xxx:~/0.2.9.r89$ make

g++ -I. -I/usr/include/libxml2 -I /usr/include/lua5.1 -D_THREAD_SAFE -D_REENTRANT -D __NO_HOMEDIR_CONF__ -D __ENABLE_SERVER_DIAGNOSTIC__ -D __USE_SQLITE__ -D __USE_MYSQL__ -Werror -Wall -O2 -c admin.cpp

In file included from /usr/include/boost/asio/detail/impl/throw_error.ipp:21,

                 from /usr/include/boost/asio/detail/throw_error.hpp:52,

                 from /usr/include/boost/asio/detail/impl/posix_mutex.ipp:23,

                 from /usr/include/boost/asio/detail/posix_mutex.hpp:73,

                 from /usr/include/boost/asio/detail/mutex.hpp:25,

                 from /usr/include/boost/asio/detail/service_registry.hpp:20,

                 from /usr/include/boost/asio/impl/io_service.hpp:18,

                 from /usr/include/boost/asio/io_service.hpp:684,

                 from /usr/include/boost/asio/basic_io_object.hpp:20,

                 from /usr/include/boost/asio/basic_socket.hpp:19,

                 from /usr/include/boost/asio/basic_datagram_socket.hpp:20,

                 from /usr/include/boost/asio.hpp:20,

                 from connection.h:25,

                 from admin.cpp:24:

/usr/include/boost/system/system_error.hpp:22: error: expected initializer before ‘:’ token

In file included from /usr/include/boost/asio/impl/io_service.hpp:18,

                 from /usr/include/boost/asio/io_service.hpp:684,

                 from /usr/include/boost/asio/basic_io_object.hpp:20,

                 from /usr/include/boost/asio/basic_socket.hpp:19,

                 from /usr/include/boost/asio/basic_datagram_socket.hpp:20,

                 from /usr/include/boost/asio.hpp:20,

                 from connection.h:25,

                 from admin.cpp:24:

/usr/include/boost/asio/detail/service_registry.hpp:38: error: expected ‘}’ before end of line

/usr/include/boost/asio/detail/service_registry.hpp:38: error: expected ‘}’ before end of line

/usr/include/boost/asio/detail/service_registry.hpp:38: error: expected declaration before end of line

make: *** [admin.o] Error 1

README źródeł:

Debian \ Ubuntu

                                Launch a terminal, and paste in this command:

                                        sudo apt-get install subversion autoconf automake make g++ libxml2 libxml2-dev libxm$

                                        wget http://heanet.dl.sourceforge.net/sourceforge/asio/boost_asio_1_4_7.tar.gz

                                        tar -xf boost_asio_1_4_7.tar.gz

                                        sudo cp -ar boost_asio_1_4_7/boost/* /usr/include/boost/

                                        sudo g++ boost_asio_1_4_7/libs/system/src/error_code.cpp -c -o /usr/lib/libboost_sys$


                        sudo: command not found

                                If you're running Debian it's possible that you don't

                                have sudo, if that's the case then you can run 'su' and

                                you will have root access. Then execute the commands

                                without 'sudo' in the beginning.


                Download sourcecode

                        Launch a terminal, and paste in this command:

                                svn co svn://svn.otland.net/public/forgottenserver/tags/0.2.9


                Compiling

                        Launch a terminal, and type this command:

                                cd 0.2.9/ && make


                Linker eror

                        If you receive a linker error saying something with 'libboost',

                        try pasting the following commands to terminal and then move back

                        to compiling again:

                                ln /usr/lib/libboost_regex-mt.so /usr/lib/libboost_regex.so && ln /usr/lib/libboost_regex-mt$

Debian po prostu nie ma domyślnie skonfigurowanego programu / polecena “sudo”.

Zaloguj się na roota poleceniem: su root i hasło administratora. Potem poprzednie komendy wykonasz bez sudo.

Dzięki za odp. Na koncie root’a niesety wyskakuje ten sam dziwny błąd. Czy to przypadkiem kompilator nie mówi że znalazł jakieś błędy składniowe w tych wszystkich pliczkach?

root@xxx:/home/lisior/0.2.9.r89# make

g++ -I. -I/usr/include/libxml2 -I /usr/include/lua5.1 -D_THREAD_SAFE -D_REENTRANT -D __NO_HOMEDIR_CONF__ -D __ENABLE_SERVER_DIAGNOSTIC__ -D __USE_SQLITE__ -D __USE_MYSQL__ -Werror -Wall -O2 -c admin.cpp

In file included from /usr/include/boost/asio/detail/impl/throw_error.ipp:21,

                 from /usr/include/boost/asio/detail/throw_error.hpp:52,

                 from /usr/include/boost/asio/detail/impl/posix_mutex.ipp:23,

                 from /usr/include/boost/asio/detail/posix_mutex.hpp:73,

                 from /usr/include/boost/asio/detail/mutex.hpp:25,

                 from /usr/include/boost/asio/detail/service_registry.hpp:20,

                 from /usr/include/boost/asio/impl/io_service.hpp:18,

                 from /usr/include/boost/asio/io_service.hpp:684,

                 from /usr/include/boost/asio/basic_io_object.hpp:20,

                 from /usr/include/boost/asio/basic_socket.hpp:19,

                 from /usr/include/boost/asio/basic_datagram_socket.hpp:20,

                 from /usr/include/boost/asio.hpp:20,

                 from connection.h:25,

                 from admin.cpp:24:

/usr/include/boost/system/system_error.hpp:22: error: expected initializer before ‘:’ token

In file included from /usr/include/boost/asio/impl/io_service.hpp:18,

                 from /usr/include/boost/asio/io_service.hpp:684,

                 from /usr/include/boost/asio/basic_io_object.hpp:20,

                 from /usr/include/boost/asio/basic_socket.hpp:19,

                 from /usr/include/boost/asio/basic_datagram_socket.hpp:20,

                 from /usr/include/boost/asio.hpp:20,

                 from connection.h:25,

                 from admin.cpp:24:

/usr/include/boost/asio/detail/service_registry.hpp:38: error: expected ‘}’ before end of line

/usr/include/boost/asio/detail/service_registry.hpp:38: error: expected ‘}’ before end of line

/usr/include/boost/asio/detail/service_registry.hpp:38: error: expected declaration before end of line

make: *** [admin.o] Error 1

Dodane 26.01.2011 (Śr) 22:35

Może chmod na te pliki z boostem?

Na to wygląda, że przed końcem linii jest niepotrzebna klamra ’ } ’ - szczerze nie wiem co z tym zrobić. Być może błędy w kodzie. Co to w ogóle za program i do czego tego potrzebujesz? Może są gdzieś paczki *.deb dla Debiana.

Komunikat sugeruje błąd składniowy, ale wcale nie musi być to błąd składniowy. Może to kwestia złej wersji Boost. Przede wszystkim: co kompilujesz i czy na pewno nie ma gotowej paczki?

Ostatecznie mógłbyś zajrzeć do tych plików i zobaczyć na co tak narzeka kompilator.

No cóż, celowo nie pisałem co kompiluję. Jest to silnik gry, której nazwy nie wolno wymawiać ;]

źródełka są tu.

http://otland.net/subversion.php?svn=public&file=listing.php&repname=forgottenserver&path=/tags/0.2.9/

Na pewno nie ma gotowej paczki, zresztą skompilować się to powinno w jakiś sposób dać …

No nie wiem, w readme kazali mi instalować 1.42

Jutro z zapałem poszperam po pliczkach, może rzeczywiście nie ma domkniętej jakiejś klamry.

Dodane 26.01.2011 (Śr) 23:15

Rzeczywiście, nie kazali 1.42 tylko 1.47. Musiałem sie zagapići zainstalować je bezmyślnie. Spróbujemy wywalić 1.42 a jak nie pomoże to reinstalne system i zobaczymy

Kodu nie kompiluje się na uprawnieniach roota ze względów bezpieczeństwa, zresztą takie prawa do kompilacji kodu nie, a przynajmniej nie powinny być wymagane. Kolega marcin miał raczej na myśli to co masz napisane w readme.

dlatego wspomniał o sudo. Do kompilacji kodu potrzebne są wyżej wymienione pakiety.

EDIT: Kolega Glothriel co prawda usunął post ale zdążyłem go przeczytać.

Odpowiedź: Sprawdź w repozytorium experimetal czy jest nowsza wersja albo poszukaj na debian.org paczki z interesującą Cię wersją.

Pozdrawiam!

Dzięki Roobal’u. Napisałem w pierwszym poście, ze zrobiłem to, co mi kazali w readme, czyli zainstalowałem wszystkie pakiety.

Problemem chyba jest to, że Boost asio 1.47 jest częścią libboost 1.45, a Squeeze ma w repozytorium libboost 1.42, czeka mnie więc najprawdopodobniej ręczna kompilacja boosta 1.45.

@edit, dobra, szukam

@edit2 W experimental nic, w unstable 1.42. Czyli kompilacja jednak.

U mnie działa z boostem 1.42, debian testing:

http://pastebin.com/mZgDnWWa

ucho@debian:~/checkouts/0.2.9.r89$ dpkg -l libboost-all-*

Desired=Unknown/Install/Remove/Purge/Hold

| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend

|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)

||/ Name Version Description

+++-======================================-======================================-============================================================================================

ii libboost-all-dev 1.42.0.1 Boost C++ Libraries development files (ALL, default version)

doinstalowane pakiety: lua5.1 libboost-all-dev lua5.1-dev libgmp3-dev libgmp3-dev libsqlite3-dev liblua5.1-sql-mysql-2 liblua5.1-sql-mysql-dev

Pewnie zrobiłeś sobie śmietnik w systemie kompilując ręcznie pakiety zamiast instalować z paczek.

@up Nie zrobiłem śmietnika, zainstalowałem go na świeżutkim systemie. Przeczytaj dokładnie pierwszy post proszę. Pierwsze co kompilowałem to TFS.

@Topic Kompilacja źródeł boost’a 1.4.5 pomogła, teraz wszystko działa jak należy.

Może to wina Virtualbox’a.

Wg. mnie, to includujesz jakiś własny plik nagłówkowy tuż przed includem pliku nagłówkowego Boosta, a zapomniałeś we własnym pliku gdzieś wstawić średnika.