我从https://libserial.readthedocs.io到我的OpenSuse Leap 15.3。为了测试功能,我构建了一个小程序:
#include <SerialStream.h>
#include <string>
int main() {
LibSerial::SerialStream serial_port;
const std::string sourcePort="/dev/ttyUSB0";
serial_port.Open(sourcePort);
serial_port.Close();
return(0);
}
现在,当我用编译时
g++ -std=gnu++11 /home/thomas/Downloads/libserial/lib/libserial.a -I /home/thomas/Downloads/libserial/src main.cpp
我得到这个错误:
usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: /tmp/ccT8Z1h6.o: in function `main':
main.cpp:(.text+0x17): undefined reference to `LibSerial::SerialStream::SerialStream()'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: main.cpp:(.text+0x76): undefined reference to `LibSerial::SerialStream::Open(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::_Ios_Openmode const&)'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: main.cpp:(.text+0x85): undefined reference to `LibSerial::SerialStream::Close()'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: main.cpp:(.text+0xa8): undefined reference to `LibSerial::SerialStream::~SerialStream()'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: main.cpp:(.text+0xde): undefined reference to `LibSerial::SerialStream::~SerialStream()'
collect2: error: ld returned 1 exit status
链接器似乎在静态库中找不到函数。有人能指出为什么会这样吗?我真的想静态链接。
非常感谢,Thomas
与此同时,我发现libserial 1.0至少需要C++14。不过,这对错误消息没有帮助。
我最终直接使用了源文件,即不构建库,而是直接包括SerialStream.cpp、SerialPort.cpp和SerialConstants.cpp。它编译时没有出错。