2017-06-04 5 views
0

I libserial-0.6.0rc2 von der Quelle in Ubuntu 16.04 und jetzt zusammengestellt versuchte, ein einfaches Testprogramm zu kompilieren:libserial undefined reference to Symbol

#include <SerialStream.h> 
#include <iostream> 
using namespace LibSerial; 
int main(int argc, char** argv) 
{ 
    SerialStream serial_port; 
    serial_port.Open("/dev/ttyS0"); 
    serial_port.SetBaudRate(SerialStreamBuf::BAUD_9600); 
    serial_port.SetCharSize(SerialStreamBuf::CHAR_SIZE_8); 
    serial_port.SetParity(SerialStreamBuf::PARITY_EVEN); 
    serial_port.SetNumOfStopBits(1); 

    serial_port.write("s", 1) ; 
} 

ich die folgende Fehlermeldung erhalten:

[email protected]:~/scan/arduino$ gcc *.cpp -Wl,- 
rpath -Wl,/usr/local/lib -L/usr/local/lib -lserial 
/usr/bin/ld: /tmp/ccT3ucCm.o: undefined reference to symbol 
'[email protected]@GLIBCXX_3.4' 
//usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO 
missing from command line 
collect2: error: ld returned 1 exit status 

Ich brauchte eine Weile, um libserial zu kompilieren, da es anscheinend eine erforderliche Abhängigkeit von SIP gab, von der ich nichts wusste. Ich kann die Beispiele mit dem mitgelieferten Makefile erstellen, aber ich kann keine eigenen Beispiele mit den installierten Bibliotheken erstellen. Hat jemand irgendwelche Ideen?

Antwort

1

Sie versuchen, ein C++ - Programm mit dem C-Compilertreiber gcc zu kompilieren und zu verknüpfen. C und C++ sind verschiedene Sprachen. gcc verknüpft standardmäßig nicht die Standard-C++ - Bibliothek libstdc++, , so dass Sie einen undefinierten Referenzfehler auf ein Symbol _ZNSaIcED1Ev (demandglled = std::allocator<char>::~allocator()) haben, das in dieser Bibliothek definiert ist.

Zum Kompilieren und Verknüpfen von C++ - Programmen verwenden Sie den C++ - Compilertreiber g++.

+0

Vielen Dank! Ich fühle mich ziemlich dumm. Besonders deine Erklärung des Symbols; Ich wusste nicht, dass das Abmelden so einfach war (ich entdeckte denangler.com). Für die Aufzeichnung musste ich auch -pthread wegen eines undefinierten Verweises auf pthread_mutex_trylock verbinden. –

Verwandte Themen