由于交叉编译树莓派,未定义对“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”的引用的主要内容,如果未能解决你的问题,请参考以下文章

rust 交叉编译树莓派程序

rust 交叉编译树莓派程序

树莓派学习笔记——交叉编译练习之SQLite3安装

树莓派交叉编译(PS交叉编译链下载安装带WiringPi库交叉编译)

搭建树莓派交叉编译环境

搭建树莓派交叉编译环境