Newsgroup: it.comp.os.linux.iniziare
Titolo: Interpretare guida

Ciao,
 
sono alle prese con il tentativo di cross-compilare le wt per arm. 
Ringrazio Andrea per avermi messo sulla buona strada nell'altro ng.
 
Faccio riferimento a questa guida:
 
http://redmine.emweb.be/projects/wt/wiki/Wt_embedded
 
 
Io per compilare le wt nativamente eseguo:
 
mkdir build
cd build
cmake -DWT_BOOST_DISCOVERY="false" -DBOOST_COMPILER="gcc44" 
-DBOOST_VERSION="1_49" -DBOOST_PREFIX="/usr/local/lib/boost_1_49_0/" 
-DCONNECTOR_HTTP="true" -DEXAMPLES_CONNECTOR="wthttp" ../
make
make install
make -C examples
 
partendo dalla cartella dove ho estratto i sorgenti.
Se capisco bene quello che dice dovrei dovrei editare il file 
CMakeList.txt aggiungendo:
 
set(CMAKE_CXX_FLAGS "-fvisibility=hidden -fvisibility-inlines-hidden 
-ffunction-sections -fdata-sections -DHAVE_GNU_REGEX -DWT_NO_LAYOUT 
-DWT_NO_SPIRIT -DWT_NO_XSS_FILTER")
 
dopo di che lanciare:
 
cmake -DWT_BOOST_DISCOVERY="false" -DBOOST_COMPILER="gcc44" 
-DBOOST_VERSION="1_49" -DBOOST_PREFIX="/usr/local/lib/boost_1_49_0/" 
-DCONNECTOR_HTTP="true" -DEXAMPLES_CONNECTOR="wthttp" 
-DCMAKE_BUILD_TYPE=MinSizeRel SHARED_LIBS:BOOL=OFF ../
 
Come mai SHARED_LIBS non ha il prefisso -D?
Viceversa, mi domando se gli argomenti -DHAVE_GNU_REGEX -DWT_NO_LAYOUT 
-DWT_NO_SPIRIT -DWT_NO_XSS_FILTER siano parametri del compilatore o 
piuttosto di cmake. Domanda idiota visto che la guida è chiara in 
proposito, ma non mi sembra coerente.
 
Cosa passo come parametro BOOST_COMPILER? Ho utilizzato 
arm-linux-gnueabi-g++, è sempre un gccxx?
 
Infine, quando lancio il make come fa a sapere che deve chiamare appunto 
arm-linux-gnueabi-g++ e non il "normale" g++? In che modo glielo devo dire?
 
Chiedo scusa per le mille domande, ma vorrei capire le cose non solo 
copiare pedissequamente le guide.
 
Grazie
Marco
 
 
 

 CMakeList.txt aggiungendo:
 
 
Allora sono riuscito a metà: le librerie boost le ho compilate 
correttamente. Il comando giusto era:
 
sudo ./bootstrap.sh --prefix=/usr/local/lib/boost_1_49_0/arm 
--with-libraries=date_time,regex,program_options,signals,random,thread,system,filesystem
 
sudo ./bjam toolset=gcc-arm
sudo ./bjam install
 
 
Ora lancio:
 
sudo cmake -DCMAKE_SYSTEM_NAME="Linux" 
-DCMAKE_C_COMPILER="arm-linux-gnueabi-gcc" 
-DCMAKE_BUILD_TYPE="MinSizeRel" -DCMAKE_CXX_FLAGS="-fvisibility=hidden 
-fvisibility-inlines-hidden -ffunction-sections -fdata-sections 
-DHAVE_GNU_REGEX -DWT_NO_LAYOUT -DWT_NO_SPIRIT -DWT_NO_XSS_FILTER" 
-DBUILD_SHARED_LIBS:BOOL=ON -DWT_BOOST_DISCOVERY="false" 
-DBOOST_PREFIX="/usr/local/lib/boost_1_49_0/arm" 
-DCMAKE_INSTALL_PREFIX=/usr/local/lib/wt/arm -DCONNECTOR_HTTP="true" 
-DEXAMPLES_CONNECTOR="wthttp" ../
 
per cross-compilare le wt, ma ottengo:
 
[ 71%] Building C object src/CMakeFiles/wt.dir/Wt/Auth/bcrypt wrapper.o 
 
 
[ 71%] Building CXX object src/CMakeFiles/wt.dir/Wt/WRasterImage.o 
 
 
[ 71%] Building CXX object src/CMakeFiles/wt.dir/Wt/FontSupportSimple.o 
 
 
Linking CXX shared library libwt.so 
 
 
/usr/bin/ld: CMakeFiles/wt.dir/Wt/Auth/passwdqc_check.o: Relocations in 
generic ELF (EM: 40) 
 
/usr/bin/ld: CMakeFiles/wt.dir/Wt/Auth/passwdqc_check.o: Relocations in 
generic ELF (EM: 40)
/usr/bin/ld: CMakeFiles/wt.dir/Wt/Auth/passwdqc_check.o: Relocations in 
generic ELF (EM: 40)
/usr/bin/ld: CMakeFiles/wt.dir/Wt/Auth/passwdqc_check.o: Relocations in 
generic ELF (EM: 40)
/usr/bin/ld: CMakeFiles/wt.dir/Wt/Auth/passwdqc_check.o: Relocations in 
generic ELF (EM: 40)
/usr/bin/ld: CMakeFiles/wt.dir/Wt/Auth/passwdqc_check.o: Relocations in 
generic ELF (EM: 40)
/usr/bin/ld: CMakeFiles/wt.dir/Wt/Auth/passwdqc_check.o: Relocations in 
generic ELF (EM: 40)
CMakeFiles/wt.dir/Wt/Auth/passwdqc_check.o: could not read symbols: File 
in wrong format
collect2: ld returned 1 exit status
make[2]: *** [src/libwt.so.3.2.1] Error 1
make[1]: *** [src/CMakeFiles/wt.dir/all] Error 2
make: *** [all] Error 2
 
 
Con google non sono riuscito a trovare granché riguardo a questo errore. 
Cosa significa e come si fa a risolverlo?
 
Grazie!
Marco

 Cosa significa e come si fa a risolverlo?
 
Secondo [1] il problema è che viene invocato gcc nativo del sistema host.
Dovresti abilitare l'uscita verbose di cmake e copiare da un punto 
precedente perché sennò non si vede quale sia il comando che da errore, 
magari usando gist o altro pastebin.
 
"Wt is a C++ library for developing web applications" mi viene in mente 
l'espressione "farsi del male da soli" ;)
 
 
 
[1] 
http://www.metastatic.org/text/libtool.html
 

 l'espressione "farsi del male da soli" ;)
 
 
Cosa intendi?
 
Marco
 

 Cosa intendi?
 
Prendevo in giro in maniera scherzosa l'uso di Wt dato che non conosco 
bene C++ e per me non sarebbe la prima scelta per una web application. 
 
Chiaramente ogni strumento ha un proprio ambito in cui ha senso e non 
conosco il tuo caso specifico.

 conosco il tuo caso specifico.
 
 
Sono nuove anche per me, ma a prima vista sembrano *esattamente* quello 
che cercavo da un sacco di tempo. Permettono la creazione di 
applicazioni web molto simili a quelle desktop, hanno un'architettura 
analoga alle Qt e permettono di sviluppare un'applicazione web che 
contemporaneamente si possa interfacciare facilmente al mondo fisico 
(es. seriali, ecc..).
 
Il problema è che ci dovrei mettere un paio d'ore a compilarle per poi 
iniziare a sviluppare invece sono più di 3 giorni che sono fermo...
 
Ad esempio ho appena scoperto che pur passando a cmake il percorso delle 
boost appena compilate lui andava a pescare una versione più vecchia 
presente nel sistema. Ok, rimossa, ma ora non c'è verso di fargliele 
trovare.
 
L'output di cmake dice due cose diverse nel giro di poche righe:
 
Unable to find the requested Boost libraries.
 
   Unable to find the Boost header files.  Please set BOOST_ROOT to the root
   directory containing Boost or BOOST_INCLUDEDIR to the directory 
containing
   Boost's headers.
 
 
e poco sotto:
 
  Could not find a boost installation in /usr/local/lib/boost_1_49_0/arm.
 
   There are two methods in Wt to find boost:
 
   1.  Find boost through cmake (recommended)
 
   This requires cmake 2.6, and is in that case the default (unless
   BOOST_COMPILER or BOOST_VERSION is defined).  This method requires a
   multi-threaded boost installation.
 
   You may need to add your boost version number to 
Boost_ADDITIONAL_VERSIONS,
   and/or set BOOST_PREFIX to the location where boost is installed.
 
 
Quindi? Quale diavolo di variabile devo impostare?
Le ho provate tutte senza esito. Idem per il metodo Wt suggerito nella 
guida.
 
Eppure l'installazione delle boost (cioè la directory target del comando 
install) è proprio /usr/local/lib/boost_1_49_0/arm! Infatti lì vi sono 
le due directory include e lib.
 
La difficoltà che ho con linux è che non riesco ancora a capire come 
risolvere gli errori apparentemente assurdi: nel senso, ovviamente se 
non lo trova ci sarà un motivo, ma pur seguendo passo passo le guide o 
leggendo documentazione o l'output non ci arrivo!
 
Ciao!
Marco