Newsgroup: it.comp.os.linux.development
Titolo: Include help!!!!

Ciao a tutti, vi espongo sublito il mio problema. Sto scrivendo un
programma, con Kdevelop, che deve fare uso di particolari librerie poste
per esattezza nella dir /usr/local/include/XDC.
Facendo uso di autoconf sono andato ad inserire nella lista delle dir da
ricercare anche la sopracitata credendo che gli oggetti compresi in queste
librerie fossero automaticamnte riconosciuti. Ma Kdevelop mi da un'errore
di compilazione dicendo di non trovare riferimenti agli oggetti!!! Come se
le librerie da me indicate non esistessero.
Ecco le mie include nel codice
#include <XDC/XD/graph.h>
#include <XDC/tester.h>
#include <XDC/mem.h>
Questi .h stanno rispettivamente in
/usr/local/include/XDC/XD/graph.h
/usr/local/include/XDC/tester.h
/usr/local/include/XDC/mem.h
E' un po' che ci sbatto la testa ma non reisco a cavarne un fico secco.
Ho sbagliato qualcosa nell'assegnazione delle dir in autoconf? Sbaglio a
scrivere le include?
Help! :)
Grazie a tutti in anticipo, spero di essere stato chiaro.
ciao, Japs

prova a verificare la linea di conamdo del compilatore:
dovrebbe comparire un -I/usr/local/include
(Come porcata si puo' sempre mettere #include
"/usr/local/include/XDC...), ma lo eviterei :-)
ciao
giammy
--
Gianluca Moro             Visit  
http://ilpinguino.altervista.org/
giang...@yahoo.com
      MyBlog 
http://blog.libero.it/giangiammy/

 dovrebbe comparire un -I/usr/local/include
Ancora piu` facile:
ln -s /usr/local/include/XDC /usr/include/XDC
Occhio che probabilmente avrai altri problemi con le librerie. Io cercherei
di capire come mai non fa il "-I/usr/local/include" dal punto di vista della
configurazione, non smanettando coi makefiles.
Ciao,
-- 
        Roberto Divia`              Love at first sight is one of the greatest
Dep:PH Bat:53 Mailbox:C02110      labour-saving devices the world has ever seen
Route de Meyrin 385               ---------------------------------------------
Case Postale                                Phone:  
+41-22-767-4994
CH-1211 Geneve 23 CERN                      Fax:    
+41-22-767-9585
Switzerland                                 E-Mail: 
Robert...@cern.ch

Grazie a tutti ora provo...
:-)

 Ciao,
Se usi autoconf, ti basta lanciare il configure come:
CPPFLAGS="-I/usr/local/include" ./configure
Puoi settare quest'opzione in kdevelop sotto al menu:
  Progetto -> Opzioni Progetto
Poi seleziona:
  Opzioni di configurazione
e nella scheda corretta (C? C++?) aggiungi alle flag preprocessore:
  -I/usr/local/include
Potresti dover ripetere il passaggio per le varie configurazioni
(optimized, debug...). C'è una lista a discesa in cima alla scheda
appena citata.
Non fare manualmente symlink strani, è generalmente una cattiva idea.
I pacchetti installati dall'utente VANNO in /usr/local, e almeno in
teorie non devono "inquinare" fuori da essa. Altrimenti rischi
potenziali danni in caso di successive installazioni da parte del packet
manager della tua distribuzione, o altri abomini difficili da capire in
un futuro più o meno remoto.
Love the FHS.
Ciao,
-- 
Matteo Settenvini
FSF Associated Member
Email : 
mat...@member.fsf.org
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d--(-) s+:- a-- C++ UL+++
P?>++ L+++>$ E+>+++ W+++ N++ o?
w--- O- M++ PS++ PE- Y+>++
PGP+++ t+ 5 X- R tv-- b+++ DI+
D++ G++ e h+ r-- y?
------END GEEK CODE BLOCK------

Japs wrote:
Allora ho impostato le direttive al preprocessore ma quello che mi viene
fuori quando compilo è questo:
qwe.o(.text+0x5b): In function `main':
qwe.cpp: undefined reference
to `X3DTK::X3D::Loader::Loader[in-charge]()'
qwe.o(.text+0x6a):qwe.cpp: undefined reference to
`X3DTK::GraphTester::GraphTester[in-charge]()'
qwe.o(.text+0x79):qwe.cpp: undefined reference to
`X3DTK::MemReleaser::MemReleaser[in-charge]()'
qwe.o(.text+0x92):qwe.cpp: undefined reference to
`X3DTK::X3DLoader::load(char const*, bool) const'
qwe.o(.text+0xa7):qwe.cpp: undefined reference to
`X3DTK::GraphTester::test(X3DTK::X3DAbstractNode*) const'
qwe.o(.text+0xbb):qwe.cpp: undefined reference to
`X3DTK::MemReleaser::release(X3DTK::X3DAbstractNode*, bool)'
qwe.o(.text+0xca):qwe.cpp: undefined reference to
`X3DTK::MemReleaser::~MemReleaser [in-charge]()'
qwe.o(.text+0xd9):qwe.cpp: undefined reference to
`X3DTK::GraphTester::~GraphTester [in-charge]()'
qwe.o(.text+0xe8):qwe.cpp: undefined reference to
`X3DTK::X3D::Loader::~Loader [in-charge]()'
qwe.o(.text+0x106):qwe.cpp: undefined reference to
`X3DTK::MemReleaser::~MemReleaser [in-charge]()'
qwe.o(.text+0x120):qwe.cpp: undefined reference to `X3DTK::GraphTester::~
Inizio a credere che non sia un problema di include, ma del codice ceh hanno
installato!! Secondo voi?

 installato!! Secondo voi?
Quelli sono problemi in fase di linking, non di compilazione. Sei sicuro
di effettuarlo contro le corrette librerie? Devi aggiustare i
Makefile.am per sapere contro chi linkare, e il 
configure.ac
 per fare i
check corretti. Se il pacchetto non è progettato per uscire dal tuo
computer, basterà che nel Makefile.am nella cartella src (per esempio),
tu modifichi gli LDFLAGS del tuo binario finale.
Per esempio, la seguente regola nel Makefile.am per orazio lo linka alla
libreria clarabella (chiamata, che so, libclarabella.so.0.0.0):
bin_PROGRAMS = orazio # questo già c'è
orazio_LDADD = -lclarabella # questo mancherebbe
Se /usr/local/lib non è nel path, e le librerie sono lì, dovrai
aggiungere alle flag del linker per il progetto Kdevelop
"-L/usr/local/lib" o quant'altro (sottodirectory, etc).
Ora, non so quali sono le librerie esatte contro le quali vuoi
effettuare il linking. Questo devi saperlo tu. Di solito i programmi
vengono con una macro m4 (installata magari in /usr/share/aclocal) che
se invocata nel 
configure.ac
 si preoccupa di impostare delle variabili
d'ambiente con le librerie corrette etc. Per esempio (ipoteticamente!
non conosco la macro corretta):
in 
configure.ac
:
AC_X3DTK_PATH( X3DTK, :, AC_ERROR([** x3dtk not found!]))
AC_SUBST( [X3DTK_LIBS] )
AC_SUBST( [X3DTK_CFLAGS] )
nel Makefile.am nella dir del sorgente:
bin_PROGRAMS = orazio # questo già c'è
orazio_CFLAGS = $(X3DTK_CFLAGS)
orazio_LDADD = $(X3DTK_LIBS)
Se è in C++, ovviamente, bisogna usare CXXFLAGS al posto di CFLAGS.
Questo semplifica molto le cose, e 9/10 dei pacchetti in giro fa così,
visto che è semplice e portabile. Molti pacchetti installano inoltre un
file di pkgconfig (.pc), e la macro da usare è quella di pkgconfig
(pkg.m4), appunto. Consultane le pagine di info se questo è il caso.
Consulta la documentazione di questo "X3DTK" per ulteriori informazioni.
Se non hai familiarità con gli autotools, continua a leggere.
(Questo è uno dei motivi per i quali sconsiglio gli IDE a chi sta
imparando: nascondono troppe cose allo sviluppatore e poi le persone non
sanno più che pesci pigliare.) Ti converrà consultare le pagine di info
per autoconf e automake. C'è anche un libro in giro per la rete, che ti
spiega come usarli. E` vecchiotto, ma può ancora essere utile.
Autobook: 
http://sources.redhat.com/autobook/download.html
Il modo che ti ho spiegato sopra non è adatto a creare un pacchetto per
la distribuzione a terzi.
Ti consiglio di scaricare qualche pacchetto per la rete di progetti (che
usano gli autotools!) già maturi e dare un occhiata. Qualcosa come GNU
Tar o altri programmi GNU andranno bene, credo.


 Inizio a credere che non sia un problema di include
Yep.  E' un problema di linker.  Linka le librerie appropriate, con
gli -L e -l corretti.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy              ROT13: 
ybe...@cq.vasa.vg

Ho risolto grazie a tutti!! :-)
Se avrò altri problemi, si spera più seri mi rifarò vivo. Eheh
ciao,
Japs