/usr/lib/gcc-cross/arm-linux-gnueabihf/9/../../../../arm-linux-gnueabihf/bin/ld: ../../../lib/libPcslib.a(ModbusConnection.cpp.o): in function `cp::ModbusConnection::ModbusConnection(char const*, cp::Serial*, int, bool)': /home/zlgmcu/Desktop/monitor-s/src/Pcslib/ModbusConnection.cpp:38: undefined reference to `esf::Connection::~Connection()' /usr/lib/gcc-cross/arm-linux-gnueabihf/9/../../../../arm-linux-gnueabihf/bin/ld: ../../../lib/libPcslib.a(ModbusConnection.cpp.o): in function `cp::ModbusConnection::~ModbusConnection()': /home/zlgmcu/Desktop/monitor-s/src/Pcslib/ModbusConnection.cpp:96: undefined reference to `esf::Connection::~Connection()' /usr/lib/gcc-cross/arm-linux-gnueabihf/9/../../../../arm-linux-gnueabihf/bin/ld: ../../../lib/libPcslib.a(ModbusConnection.cpp.o): in function `esf::Connection::Connection()': /home/zlgmcu/Desktop/monitor-s/src/Pcslib/Connection.hpp:33: undefined reference to `vtable for esf::Connection' /usr/lib/gcc-cross/arm-linux-gnueabihf/9/../../../../arm-linux-gnueabihf/bin/ld: ../../../lib/libPcslib.a(ModbusConnection.cpp.o):(.data.rel.ro+0x8): undefined reference to `typeinfo for esf::Connection' collect2: error: ld returned 1 exit status make[2]: *** [src/main/CMakeFiles/start_main.dir/build.make:95:../bin/start_main] 错误 1 make[1]: *** [CMakeFiles/Makefile2:459:src/main/CMakeFiles/start_main.dir/all] 错误 2 make: *** [Makefile:84:all] 错误 2
时间: 2023-08-01 07:10:36 浏览: 156
根据你提供的编译错误信息,出现了多个链接错误和未定义引用。
首先,错误信息指出在`ModbusConnection.cpp`文件中的`cp::ModbusConnection`构造函数和析构函数调用了基类`esf::Connection`的析构函数,但是找不到该析构函数的定义。
这个错误通常是由于链接阶段找不到基类成员函数的定义引起的。可能的原因有:
1. 基类`esf::Connection`的源文件或库文件没有正确地被编译和链接到最终的可执行文件中。请确保基类的实现文件或库文件被正确包含在编译和链接命令中。
2. 基类`esf::Connection`的析构函数没有被正确地定义和实现。请确保基类的析构函数在定义和实现时没有出错,并且在链接阶段能够找到。
3. 如果基类是一个纯虚基类(包含纯虚函数),则需要确保派生类实现了基类的纯虚函数。
另外,错误信息中还指出了对基类`esf::Connection`的虚函数表(vtable)和类型信息(typeinfo)的引用未定义。这可能是因为基类的析构函数没有被正确地定义和实现,导致编译器无法生成虚函数表和类型信息。
要解决这些问题,你可以检查以下几点:
1. 确保基类`esf::Connection`的头文件被正确地包含在相关源文件中。
2. 确保基类`esf::Connection`的实现文件被正确地编译和链接到最终的可执行文件中。
3. 检查基类`esf::Connection`的析构函数定义和实现是否正确,确保在链接阶段能够找到。
4. 如果基类是一个纯虚基类,确保派生类实现了基类的纯虚函数。
如果问题仍然存在,可能需要进一步检查编译和链接命令,以及相关的代码和上下文信息,以确定具体的解决方法。
阅读全文