我从https://libserial.readthedocs.io下载并构建了libSerial1.0到我的OpenSuse Leap15.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看起来链接器几乎找不到静态库中的函数。有人能指出为什么会这样吗?我真的很想静态链接。
非常感谢,托马斯
发布于 2021-06-28 15:46:52
与此同时,我发现libSerial1.0至少需要C++ 14,但这对错误消息没有帮助。
我最终直接使用了源文件,即不构建库,而是直接包含SerialStream.cpp、SerialPort.cpp和SerialConstants.cpp。它编译时没有错误。
https://stackoverflow.com/questions/68128442
复制相似问题