libserial undefined对符号的引用

时间:2017-06-04 02:05:50

标签: c++ gcc libserial

我在Ubuntu 16.04中从源代码编译了libserial-0.6.0rc2,现在我正在尝试编译一个简单的测试程序:

#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 ) ;
}

我收到以下错误:

karl@karl-T430u:~/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 
'_ZNSaIcED1Ev@@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

我花了一段时间来编译libserial,因为显然我需要依赖SIP,这是我不知道的。我可以使用提供的makefile构建示例,但我无法使用已安装的库构建我自己的示例。有没有人有任何想法?

1 个答案:

答案 0 :(得分:1)

您正在尝试使用C编译器驱动程序编译和链接C ++程序 gcc。 C和C ++是不同的语言。 gcc默认情况下不会链接标准C ++库libstdc++, 所以你对符号_ZNSaIcED1Ev有一个未定义的引用错误(demangled = std::allocator<char>::~allocator())在该库中定义。

要编译和链接C ++程序,请使用C ++编译器驱动程序g++