2017-06-04 72 views
0

我在Ubuntu 16.04編譯libserial-0.6.0rc2從源代碼,我現在嘗試編譯一個簡單的測試程序:libserial未定義的參考符號

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

,我發現了以下錯誤:

[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 

我花了一段時間編譯libserial,因爲顯然這是我不知道的SIP所需的依賴關係。我可以使用提供的makefile構建示例,但我無法使用已安裝的庫構建自己的示例。有沒有人有任何想法?

回答

1

您正在嘗試編譯並鏈接C編譯器驅動程序的C++程序 gcc。 C和C++是不同的語言。 gcc默認情況下不會鏈接標準C++庫libstdc++, ,因此您對該庫中定義的符號_ZNSaIcED1Ev(取消處理 = std::allocator<char>::~allocator())有未定義的參考錯誤。

要編譯和鏈接C++程序,請使用C++編譯器驅動程序g++

+0

非常感謝!我感到非常愚蠢。特別是你對符號的解釋;我不知道demangling是如此簡單(我發現demangler.com)。爲了記錄,我還必須鏈接-pthread,因爲對pthread_mutex_trylock有未定義的引用。 –