View Full Version : [c++] Compilazione sorgenti
RaouL_BennetH
11-01-2005, 13:25
Buongiorno ragazzi, volevo chiedervi se potreste indicarmi come fare per:
ho scaricato una libreria in c++ che permette di leggere la porta seriale, il link è questo:
http://sourceforge.net/projects/libserial/
ora, ho scompattato il tar, fatto la triade ./configure, make e make install senza errori.
Ora, quest'operazione mi crea anche una dir con degli esempi, uno dei quali ho dovuto modificarlo perchè la seriale aperta nel sorgente non corrisponde con la seriale che ho io da aprire sul mio pc. Bene, vado a salvare il sorgente e a compilarlo con g++, ma mi da errori in merito alla libreria che sto usando, quindi credo che debba passarla come opzione al compilatore g++. Ed è questo il mio problema, non so come fare dato che nel README del tar, non c'è nessun riferimento.
Mi aiutate?
Thx.
RaouL.
ilsensine
11-01-2005, 13:38
Per linkare una libreria, devi passare il parametro -l<nome libreria>. Ad esempio:
g++ [...] -lciao
per linkare la libreria libciao.so (nota che lib e .so sono omessi).
RaouL_BennetH
11-01-2005, 13:44
Originariamente inviato da ilsensine
Per linkare una libreria, devi passare il parametro -l<nome libreria>. Ad esempio:
g++ [...] -lciao
per linkare la libreria libciao.so (nota che lib e .so sono omessi).
Grazie :)
Provo subito!
RaouL_BennetH
11-01-2005, 13:51
allora, ecco quello che non va:
se cerco di includere la libreria così:
g++ read_port.cpp -o readport -llibserial
ecco l'output:
/usr/bin/ld: cannot find -llibserial
collect2: ld returned 1 exit status
Ho pensato subito che probabilmente sbagliavo il nome della libreria, ma la libreria presente è appunto libserial.so
:what:
ilsensine
11-01-2005, 13:52
Originariamente inviato da ilsensine
nota che lib e .so sono omessi
RaouL_BennetH
11-01-2005, 13:54
Originariamente inviato da ilsensine
nota che sono un pirla e non so leggere :(
:)
RaouL_BennetH
11-01-2005, 14:04
allora, c'è qualche problema:
#include <SerialStream.h>
#include <ios>
#include <iostream>
int main( int argc, char** argv )
{
//
// Open the serial port.
//
using namespace LibSerial ;
SerialStream serial_port ;
serial_port.Open( "/dev/ttyS0" ) ;
if ( ! serial_port.good() ) {
std::cerr << "Error: Could not open serial port." << std::endl ;
exit(1) ;
}
//
// Set the baud rate of the serial port.
//
serial_port.SetBaudRate( SerialStreamBuf::BAUD_19200 ) ;
if ( ! serial_port.good() ) {
std::cerr << "Error: Could not set the baud rate." << std::endl ;
exit(1) ;
}
//
// Set the number of data bits.
//
serial_port.SetCharSize( SerialStreamBuf::CHAR_SIZE_8 ) ;
if ( ! serial_port.good() ) {
std::cerr << "Error: Could not set the character size." << std::endl ;
exit(1) ;
}
//
// Disable parity.
//
serial_port.SetParity( SerialStreamBuf::PARITY_NONE ) ;
if ( ! serial_port.good() ) {
std::cerr << "Error: Could not disable the parity." << std::endl ;
exit(1) ;
}
//
// Set the number of stop bits.
//
serial_port.SetNumOfStopBits( 1 ) ;
if ( ! serial_port.good() ) {
std::cerr << "Error: Could not set the number of stop bits."
<< std::endl ;
exit(1) ;
}
// Turn on hardware flow control
serial_port.SetFlowControl( SerialStreamBuf::FLOW_CONTROL_NONE ) ;
if ( ! serial_port.good() ) {
std::cerr << "Error: Could not use hardware flow control."
<< std::endl ;
exit(1) ;
}
//
// Do not skip whitespace characters while reading from the
// serial port.
//
serial_port.unsetf( std::ios_base::skipws ) ;
//
// Keep reading data from serial port and print it to the screen.
//
char ch ;
while( serial_port.get(ch) ) {
std::cerr.put(ch) ;
}
return EXIT_SUCCESS ;
}
allora, compilato con: g++ read_port.cpp -o readport -lserial
compila senza errori, quando vado ad eseguirlo mi da:
./readport
./readport: error while loading shared libraries: libserial.so.0: cannot open shared object file: No such file or directory
ma non ho capito quale file non trova, cioè, se non trovasse libserial non dovrebbe nemmeno compilarmi, sbaglio?
ilsensine
11-01-2005, 14:06
Immagino che la libreria è stata installata dentro /usr/local/lib. Aggiungi quel path al file /etc/ld.so.conf, ed esegui "ldconfig".
RaouL_BennetH
11-01-2005, 14:26
Originariamente inviato da ilsensine
Immagino che la libreria è stata installata dentro /usr/local/lib. Aggiungi quel path al file /etc/ld.so.conf, ed esegui "ldconfig".
grazie mille ilsensine, e sapessi certe volte come mi secca chiedere certe cose, ma purtroppo, non sempre i readme che accompagnano gli esempi sono dedicati ai principianti, nel senso che credo che siano già rivolti a chi certe cose le sa per scontato :(
Ancora grazie :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.