0

我从https://libserial.readthedocs.io下载并构建了 libserial 1.0 到我的 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

似乎链接器在静态库中找不到该函数。谁能指出为什么会这样?我真的很想静态链接。

非常感谢,托马斯

4

1 回答 1

0

与此同时,我发现 libserial 1.0 至少需要 C++ 14。不过,这对错误消息没有帮助。

我最终直接使用了源文件,即不构建库,而是直接包括 SerialStream.cpp、SerialPort.cpp 和 SerialConstants.cpp。它编译没有错误。

于 2021-06-28T07:46:52.453 回答