对 ArduiPi_OLED 和 Adafruit_GFX 的未定义引用
undefined reference to ArduiPi_OLED and Adafruit_GFX
美好的一天,新年快乐!
我实际上有很多困难来解决我遇到的问题,可能是由于我缺乏 C++ 知识
我在 Raspberry Zero W 上下载并安装了一个库,以获取 Radio 包和另一个库以在 OLED LCD 上显示消息。
RadioHead
OLED
两者都可以独立工作。
但是,当我在 Raspberry 上收到无线电数据时,我想在我的 LCD 显示器上显示它。
让我为您提供最详细的信息:
首先记住安装ArduiPi_OLED后,一些文件被复制到/usr/local/include和usr/local/lib/
/usr/local/lib $ ls -ls
total 144
0 lrwxrwxrwx 1 root staff 22 Jan 6 22:54 ArduiPi_OLED.so.1 -> libArduiPi_OLED.so.1.0
0 lrwxrwxrwx 1 root staff 37 Jan 6 22:54 libArduiPi_OLED.so -> /usr/local/lib/libArduiPi_OLED.so.1.0
0 lrwxrwxrwx 1 root staff 37 Jan 6 22:54 libArduiPi_OLED.so.1 -> /usr/local/lib/libArduiPi_OLED.so.1.0
64 -rwxr-xr-x 1 root staff 62692 Jan 6 22:54 libArduiPi_OLED.so.1.0
68 -rw-r--r-- 1 root staff 67576 Jan 7 19:41 libbcm2835.a
4 drwxrwsr-x 3 root staff 4096 Sep 7 17:39 pypy2.7
4 drwxrwsr-x 4 root staff 4096 Dec 31 01:08 python2.7
4 drwxrwsr-x 3 root staff 4096 Sep 7 17:02 python3.5
/usr/local/inlcude:
ls -ls /usr/local/include/
total 100
4 -rw-r--r-- 1 root staff 3931 Jan 6 22:54 Adafruit_GFX.h
8 -rw-r--r-- 1 root staff 7272 Jan 6 22:54 ArduiPi_OLED.h
4 -rw-r--r-- 1 root staff 2474 Jan 6 22:54 ArduiPi_OLED_lib.h
84 -rw-r--r-- 1 root staff 82921 Jan 7 19:41 bcm2835.h
为了获取收听无线电发送器模块发送的数据的脚本,我在编译后启动了以下脚本
rf95_server
(而且效果很好)
因为我想从接收到的 Radio 包中打印一些小文本,所以我首先在 rf95_server.cpp
中添加了以下内容
// For OLED LCD
#include "ArduiPi_OLED_lib.h"
#include "Adafruit_GFX.h"
#include "ArduiPi_OLED.h"
#include <getopt.h>
// Instantiate the display
ArduiPi_OLED display;
然后我编译自
cd RadioHead/examples/raspi/rf95
sudo make
不幸的是,我的终端向我打印了以下消息:
g++ rf95_server.o RH_RF95.o RasPi.o RHHardwareSPI.o RHGenericDriver.o
RHGenericSPI.o RHSPIDriver.o -lbcm2835 -o rf95_server rf95_server.o:
In function __static_initialization_and_destruction_0(int, int)':
rf95_server.cpp:(.text+0x438): undefined reference to
ArduiPi_OLED::ArduiPi_OLED()' rf95_server.o: In function
Adafruit_GFX::~Adafruit_GFX()':
rf95_server.cpp:(.text._ZN12Adafruit_GFXD2Ev[_ZN12Adafruit_GFXD5Ev]+0x30): undefined reference to
vtable for Adafruit_GFX' rf95_server.o: In
function ArduiPi_OLED::~ArduiPi_OLED()':
rf95_server.cpp:(.text._ZN12ArduiPi_OLEDD2Ev[_ZN12ArduiPi_OLEDD5Ev]+0x38): undefined reference to
vtable for ArduiPi_OLED' collect2: error: ld
returned 1 exit status Makefile:45: recipe for target 'rf95_server'
failed make: *** [rf95_server] Error 1
如果我评论以下内容
ArduiPi_OLED display;
没有错误信息。
我认为问题是因为我的 rf95_server.cpp 找不到对 ArduiPi_OLED 库的引用,这是我的问题,因为我不知道该怎么做。
首先我想在我的 make 命令中添加一个选项作为
sudo make -I [path-of-ArduiPi_OLED]
不知道-I是否正确
我不知道如何格式化路径
- /usr/local/inlcude?
- /usr/local/bin?
- ~/Soft/RadioHead/example/raspi/rf95?
我还尝试通过在 INCLUDE 之前添加以下内容并修改 INCLUDE 行来修改 Makefile,如下所示:
OLEDBASE = ../../../../ArduiPi_OLED
INCLUDE = -I$(RADIOHEADBASE) -I$(OLEDBASE)
但是 none 这行得通。
所以我的问题是:如何将 ArduiPi_OLED 包含到 rf95_server.cpp 脚本中,然后 "belong" 到 radioHead?
非常非常感谢您的帮助
我想你忘了 link 反对 ArduiPi_OLED 图书馆。您需要修改 makefile 中的 LIBS 变量:
LIBS = -lbcm2835 -lArduiPi_OLED
此外,如果您将库 headers 包含在 #include <ArduiPi_OLED.h>
中,编译器将自动在系统路径中查找 headers,例如 /usr/local/include
。 (参见 this thread 示例)
美好的一天,新年快乐! 我实际上有很多困难来解决我遇到的问题,可能是由于我缺乏 C++ 知识
我在 Raspberry Zero W 上下载并安装了一个库,以获取 Radio 包和另一个库以在 OLED LCD 上显示消息。 RadioHead OLED 两者都可以独立工作。
但是,当我在 Raspberry 上收到无线电数据时,我想在我的 LCD 显示器上显示它。
让我为您提供最详细的信息:
首先记住安装ArduiPi_OLED后,一些文件被复制到/usr/local/include和usr/local/lib/
/usr/local/lib $ ls -ls
total 144
0 lrwxrwxrwx 1 root staff 22 Jan 6 22:54 ArduiPi_OLED.so.1 -> libArduiPi_OLED.so.1.0
0 lrwxrwxrwx 1 root staff 37 Jan 6 22:54 libArduiPi_OLED.so -> /usr/local/lib/libArduiPi_OLED.so.1.0
0 lrwxrwxrwx 1 root staff 37 Jan 6 22:54 libArduiPi_OLED.so.1 -> /usr/local/lib/libArduiPi_OLED.so.1.0
64 -rwxr-xr-x 1 root staff 62692 Jan 6 22:54 libArduiPi_OLED.so.1.0
68 -rw-r--r-- 1 root staff 67576 Jan 7 19:41 libbcm2835.a
4 drwxrwsr-x 3 root staff 4096 Sep 7 17:39 pypy2.7
4 drwxrwsr-x 4 root staff 4096 Dec 31 01:08 python2.7
4 drwxrwsr-x 3 root staff 4096 Sep 7 17:02 python3.5
/usr/local/inlcude:
ls -ls /usr/local/include/
total 100
4 -rw-r--r-- 1 root staff 3931 Jan 6 22:54 Adafruit_GFX.h
8 -rw-r--r-- 1 root staff 7272 Jan 6 22:54 ArduiPi_OLED.h
4 -rw-r--r-- 1 root staff 2474 Jan 6 22:54 ArduiPi_OLED_lib.h
84 -rw-r--r-- 1 root staff 82921 Jan 7 19:41 bcm2835.h
为了获取收听无线电发送器模块发送的数据的脚本,我在编译后启动了以下脚本 rf95_server (而且效果很好)
因为我想从接收到的 Radio 包中打印一些小文本,所以我首先在 rf95_server.cpp
中添加了以下内容// For OLED LCD
#include "ArduiPi_OLED_lib.h"
#include "Adafruit_GFX.h"
#include "ArduiPi_OLED.h"
#include <getopt.h>
// Instantiate the display
ArduiPi_OLED display;
然后我编译自
cd RadioHead/examples/raspi/rf95
sudo make
不幸的是,我的终端向我打印了以下消息:
g++ rf95_server.o RH_RF95.o RasPi.o RHHardwareSPI.o RHGenericDriver.o RHGenericSPI.o RHSPIDriver.o -lbcm2835 -o rf95_server rf95_server.o: In function
__static_initialization_and_destruction_0(int, int)': rf95_server.cpp:(.text+0x438): undefined reference to
ArduiPi_OLED::ArduiPi_OLED()' rf95_server.o: In functionAdafruit_GFX::~Adafruit_GFX()': rf95_server.cpp:(.text._ZN12Adafruit_GFXD2Ev[_ZN12Adafruit_GFXD5Ev]+0x30): undefined reference to
vtable for Adafruit_GFX' rf95_server.o: In functionArduiPi_OLED::~ArduiPi_OLED()': rf95_server.cpp:(.text._ZN12ArduiPi_OLEDD2Ev[_ZN12ArduiPi_OLEDD5Ev]+0x38): undefined reference to
vtable for ArduiPi_OLED' collect2: error: ld returned 1 exit status Makefile:45: recipe for target 'rf95_server' failed make: *** [rf95_server] Error 1
如果我评论以下内容
ArduiPi_OLED display;
没有错误信息。
我认为问题是因为我的 rf95_server.cpp 找不到对 ArduiPi_OLED 库的引用,这是我的问题,因为我不知道该怎么做。
首先我想在我的 make 命令中添加一个选项作为
sudo make -I [path-of-ArduiPi_OLED]
不知道-I是否正确 我不知道如何格式化路径
- /usr/local/inlcude?
- /usr/local/bin?
- ~/Soft/RadioHead/example/raspi/rf95?
我还尝试通过在 INCLUDE 之前添加以下内容并修改 INCLUDE 行来修改 Makefile,如下所示:
OLEDBASE = ../../../../ArduiPi_OLED
INCLUDE = -I$(RADIOHEADBASE) -I$(OLEDBASE)
但是 none 这行得通。
所以我的问题是:如何将 ArduiPi_OLED 包含到 rf95_server.cpp 脚本中,然后 "belong" 到 radioHead?
非常非常感谢您的帮助
我想你忘了 link 反对 ArduiPi_OLED 图书馆。您需要修改 makefile 中的 LIBS 变量:
LIBS = -lbcm2835 -lArduiPi_OLED
此外,如果您将库 headers 包含在 #include <ArduiPi_OLED.h>
中,编译器将自动在系统路径中查找 headers,例如 /usr/local/include
。 (参见 this thread 示例)