PlatformIO collect2.exe 链接器错误:未定义引用
PlatformIO collect2.exe linker error with: undefined reference to
我正在尝试通过为 libraries/dependencies 创建 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"
和
//myLib.h
#include "../ExternalLibFolder/src/externalLib.h"
void myTask(void * parameter);
//myLib.cpp
#include "myLib.h"
void myTask(void * parameter) {
aClass myClass(someVal);
myClass.init();
while(1) {
//blah
}
}
和
//externalLib.h
class aClass :anInheritance{
aClass(someType parameter);
void inti();
}
//externalLib.cpp
aClass::aClass(someType parameter){}
void aClass::init() {
anInheritance::begin();
}
此结构returns出现以下错误:
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+
我在调试时发现了一个非常难运行ge 的东西,但我没有答案。我是 运行 FreeRTOS,真正 st运行ge 的事情是程序在以下时间成功构建:
- 我从 platformio.ini 文件中删除
lib_ldf_mode = chain+
行
- loop() 看起来像这样:
void loop() {
/*
#include externalLib.h
*/
}
一旦我从 loop() 中删除 /* #include externalLib.h */
行,或者我将其更改为 //#include externalLib.h
,链接器 运行 再次进入问题。然后我不得不将 lib_ldf_mode = chain+
行添加到 platformio.ini.
我正在尝试通过为 libraries/dependencies 创建 git 个子模块来模块化我的代码,但我 运行 遇到了链接器问题 collect2.exe
。我正在 VScode.
以下结构发生链接错误。请注意我已经简化了名称和结构以供说明。
|--include
|--lib
| |--MyLibFolder
| |--src
| |-myLib.h
| |-myLib.cpp
| |--ExternalLibFolder
| |--src
| |-externalLib.h
| |-externalLib.cpp
|--src
| |-main.cpp
其中:
//main.cpp
#include "myLib.h"
和
//myLib.h
#include "../ExternalLibFolder/src/externalLib.h"
void myTask(void * parameter);
//myLib.cpp
#include "myLib.h"
void myTask(void * parameter) {
aClass myClass(someVal);
myClass.init();
while(1) {
//blah
}
}
和
//externalLib.h
class aClass :anInheritance{
aClass(someType parameter);
void inti();
}
//externalLib.cpp
aClass::aClass(someType parameter){}
void aClass::init() {
anInheritance::begin();
}
此结构returns出现以下错误:
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+
我在调试时发现了一个非常难运行ge 的东西,但我没有答案。我是 运行 FreeRTOS,真正 st运行ge 的事情是程序在以下时间成功构建:
- 我从 platformio.ini 文件中删除
lib_ldf_mode = chain+
行 - loop() 看起来像这样:
void loop() {
/*
#include externalLib.h
*/
}
一旦我从 loop() 中删除 /* #include externalLib.h */
行,或者我将其更改为 //#include externalLib.h
,链接器 运行 再次进入问题。然后我不得不将 lib_ldf_mode = chain+
行添加到 platformio.ini.