如何在 linux 上编译 libserial?
How to compile libserial on 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
您需要link将库添加到您的代码中。
尝试使用
g++ test.cpp -L<PATH_TO_LIB_SERIAL_LIBRARY_DIR> -lserial
假设您在 /usr/local/lib 中安装了 libserial(libserial.a 或 libserial.so 在 /usr/local/lib 中)
你会使用下面的命令来编译和link你的程序
g++ test.cpp -L/usr/local/lib -lserial
您发布的错误输出显示错误发生在 linking 阶段。
见What is an undefined reference/unresolved external symbol error and how do I fix it?
有关可能导致 linking 错误的原因的更多信息。
在这种情况下,您似乎没有 link 去图书馆。
我的程序需要与串行设备通信。我正在 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
您需要link将库添加到您的代码中。
尝试使用
g++ test.cpp -L<PATH_TO_LIB_SERIAL_LIBRARY_DIR> -lserial
假设您在 /usr/local/lib 中安装了 libserial(libserial.a 或 libserial.so 在 /usr/local/lib 中) 你会使用下面的命令来编译和link你的程序
g++ test.cpp -L/usr/local/lib -lserial
您发布的错误输出显示错误发生在 linking 阶段。
见What is an undefined reference/unresolved external symbol error and how do I fix it?
有关可能导致 linking 错误的原因的更多信息。
在这种情况下,您似乎没有 link 去图书馆。