由于交叉编译树莓派,未定义对“Adafruit_GFX 的 vtable”的引用
Posted
技术标签:
【中文标题】由于交叉编译树莓派,未定义对“Adafruit_GFX 的 vtable”的引用【英文标题】:Undefined refence to 'vtable for Adafruit_GFX' due cross compiling raspberry pi 【发布时间】:2016-05-14 20:33:21 【问题描述】:在 Visualstudio 中通过尝试交叉编译到树莓派,我收到以下错误:
VisualGDB:在 pi@raspberrypi (SSH) 上运行目录“/tmp/VisualGDB/c/Users/Revius/Desktop/usbtest/conversiecsc++/LinuxProject12/LinuxProject12”中的“make CONFIG=Debug”
g++ -ggdb -ffunction-sections -O0 -DDEBUG -c LinuxProject12.cpp -o Debug/LinuxProject12.o -MD -MF Debug/LinuxProject12.dep
g++ -o Debug/LinuxProject12 -Wl,-gc-sections -L/home/pi/libssd1306/build/ArduiPi_OLED -Wl,--start-group Debug/LinuxProject12.o -Wl,--rpath='$ ORIGIN' -Wl,--end-group Debug/LinuxProject12.o:在函数“Adafruit_GFX::~Adafruit_GFX()”中:
C:\Users\Revius\AppData\Local\VisualGDB\RemoteSourceCache\raspberrypi\0003\include\Adafruit_GFX.h(35):错误 VGDB1000:未定义对 `vtable for Adafruit_GFX' 的引用
编译器指向的 Adafruit_GFX.H 部分是
"virtual ~Adafruit_GFX() ;"
在:
#ifndef _ADAFRUIT_GFX_H
#define _ADAFRUIT_GFX_H
#define swap(a, b) int16_t t = a; a = b; b = t;
//class Adafruit_GFX : public Print
class Adafruit_GFX
public:
//Adafruit_GFX();
// i have no idea why we have to formally call the constructor. kinda sux
void constructor(int16_t w, int16_t h);
virtual ~Adafruit_GFX() ;
// this must be defined by the subclass
virtual void drawPixel(int16_t x, int16_t y, uint16_t color) = 0;
virtual void invertDisplay(boolean i);
奇怪的部分是我在树莓派上使用“make”并且在工作中,我可以开始,所以它工作代码好吗?但不是 Visualstudio?
所以我的问题是: 由于我正在交叉编译,我可能是编译器缺少某些文件,还是有我可以操纵的选项使其工作?
我必须往哪个方向寻找答案?
【问题讨论】:
您是否在基类中为invertDisplay
提供了定义?
是的。但是,您在此处看到的代码部分要大得多,因此可能有更多未使用的定义。但该代码适用于树莓派。他们使用相同的“交叉编译器”。可以调整一些设置吗?
【参考方案1】:
Setting for the Makefile in MSVS-GDB for oled display
通过调整(或正确填写 te 设置)我得到了它的工作。
【讨论】:
以上是关于由于交叉编译树莓派,未定义对“Adafruit_GFX 的 vtable”的引用的主要内容,如果未能解决你的问题,请参考以下文章