C++ PlatformIO collect2.exe链接器错误:未定义对的引用

C++ PlatformIO collect2.exe链接器错误:未定义对的引用,c++,linker,platformio,C++,Linker,Platformio,我试图通过为库/依赖项装入git子模块来模块化代码,但我遇到了链接器问题collect2.exe。我正在VScode中使用PlatformIO编译和构建 链接错误发生在以下结构中。请注意,为了便于说明,我简化了名称和结构 |--include |--lib | |--MyLibFolder | |--src | |-myLib.h | |-myLib.cpp | |--ExternalLibFolder | |--src | |-exte

我试图通过为库/依赖项装入git子模块来模块化代码,但我遇到了链接器问题
collect2.exe
。我正在VScode中使用PlatformIO编译和构建

链接错误发生在以下结构中。请注意,为了便于说明,我简化了名称和结构

|--include
|--lib
|  |--MyLibFolder
|    |--src
|      |-myLib.h
|      |-myLib.cpp
|    |--ExternalLibFolder
|      |--src
|        |-externalLib.h
|        |-externalLib.cpp
|--src
|  |-main.cpp
其中:

//main.cpp
#include "myLib.h"

此结构返回以下错误:

In function `MyTask()`
myLib.cpp:(.text._....): undefined reference to `aClass::aClass(someType &)'
myLib.cpp:(.text._....): undefined reference to `aClass::init()'
collect2.exe: error: ld returned 1 exit status
***[.pio\build\teensy41\firmware.elf] Error 1
注意:当我将所有源文件放入
lib/MyLibFolder/src
文件夹时,程序运行和编译都非常完美。或者,如果我将每个子模块放在lib/文件夹下,那么程序也可以正常运行。只有当我以递归的方式将代码拆分为子模块时,我才会遇到这个问题


我不知道如何处理这个链接器问题,任何帮助都是很好的

为了使构建成功,必须在platformio.ini文件中添加以下两行内容:

lib_extra_dirs = lib/MyLibFolder/ExternalLibFolder
lib_ldf_mode = chain+
我在调试时发现了一件非常奇怪的事情,对此我没有答案。我正在运行FreeRTOS,真正奇怪的是,程序在以下情况下成功构建:

  • 我从platformio.ini文件中删除
    lib\u ldf\u mode=chain+
  • loop()如下所示:

  • 当我从loop()中删除
    /*#include externalLib.h*/
    行或将其更改为
    /#include externalLib.h
    时,链接器再次遇到问题。然后我不得不将
    lib\u ldf\u mode=chain+
    行添加到platformio.ini中。

    您显示了
    aClass
    函数的声明,但是定义(它们的实现)在哪里?您是否使用定义(实现)所在的源文件进行构建?实际上,您应该会遇到另一个错误,因为
    aClass myClass(someType someVal)
    声明了一个名为
    myClass
    的函数,而不是
    aClass
    对象。请原谅,我最近才了解链接器和编译器,但如果我理解正确的话;aClass在函数myMethod中定义。请允许我详细说明你的第二个问题(构建源文件…?)不确定当前错误是否掩盖了另一个错误,但在这个阶段只有上述错误。现在,你如何构建你的项目?你是如何建立图书馆的?你如何建立你的程序?你如何与图书馆联系?
    In function `MyTask()`
    myLib.cpp:(.text._....): undefined reference to `aClass::aClass(someType &)'
    myLib.cpp:(.text._....): undefined reference to `aClass::init()'
    collect2.exe: error: ld returned 1 exit status
    ***[.pio\build\teensy41\firmware.elf] Error 1
    
    lib_extra_dirs = lib/MyLibFolder/ExternalLibFolder
    lib_ldf_mode = chain+
    
    void loop() {
      /*
      #include externalLib.h
      */
    }