Как скомпилировать 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

Вывод ошибки, который вы опубликовали, показывает, что ошибка произошла на этапе компоновки.

См. Что такое неопределенная ссылка / неразрешенная внешняя ошибка символа и как ее исправить?

для получения дополнительной информации о том, что может вызвать ошибки компоновки.

В этом случае похоже, что вы не ссылались на библиотеку.

Другие вопросы по тегам