Как скомпилировать libserial на linux?
Моя программа должна общаться с последовательным устройством. Я разрабатываю его на Ubuntu 14.04 LTS. Я нашел libserial и попытался его использовать, но он не компилируется. Я скачал, скомпилировал и установил v0.6.0rc2. Да, это rc, но он более популярен на sourceforge, а стабильные релизы очень старые. Если вы знаете лучшую библиотеку, пожалуйста, сообщите мне об этом в комментариях.
Код, приведенный ниже в соответствии с документами, не компилируется:
#include <SerialStream.h>
//
using namespace LibSerial ;
main()
{
SerialStream my_serial_stream ;
//
// Open the serial port for communication.
//
my_serial_stream.Open( "/dev/ttyS0" ) ;
}
Это ошибка, которую я получаю:
dalton@dalton-SVF14212SNW:~$ g++ test.cpp
/tmp/ccyWIbXN.o: In function `main':
test.cpp:(.text+0x17): undefined reference to `LibSerial::SerialStream::SerialStream()'
test.cpp:(.text+0x6d): undefined reference to `LibSerial::SerialStream::Open(std::string, std::_Ios_Openmode)'
test.cpp:(.text+0x9a): undefined reference to `LibSerial::SerialStream::~SerialStream()'
test.cpp:(.text+0xd6): undefined reference to `LibSerial::SerialStream::~SerialStream()'
collect2: error: ld returned 1 exit status
Я изменил эту строку на my_serial_stream.Open( "/dev/ttyS0" , ios::out ) ;
и добавил пространство имен std
, Теперь я получаю эту ошибку:
dalton@dalton-SVF14212SNW:~$ g++ test.cpp
/tmp/ccUhSQVA.o: In function `main':
test.cpp:(.text+0x17): undefined reference to `LibSerial::SerialStream::SerialStream()'
test.cpp:(.text+0x5f): undefined reference to `LibSerial::SerialStream::Open(std::string, std::_Ios_Openmode)'
test.cpp:(.text+0x8c): undefined reference to `LibSerial::SerialStream::~SerialStream()'
test.cpp:(.text+0xc8): undefined reference to `LibSerial::SerialStream::~SerialStream()'
collect2: error: ld returned 1 exit status
1 ответ
Вам нужно связать библиотеку с вашим кодом.
попробуйте использовать
g++ test.cpp -L<PATH_TO_LIB_SERIAL_LIBRARY_DIR> -lserial
Предположим, что вы установили libserial в / usr / local / lib (libserial.a или libserial.so находится в / usr / local / lib), вы будете использовать следующую команду для компиляции и компоновки вашей программы
g++ test.cpp -L/usr/local/lib -lserial
Вывод ошибки, который вы опубликовали, показывает, что ошибка произошла на этапе компоновки.
См. Что такое неопределенная ссылка / неразрешенная внешняя ошибка символа и как ее исправить?
для получения дополнительной информации о том, что может вызвать ошибки компоновки.
В этом случае похоже, что вы не ссылались на библиотеку.