美好的一天,新年快乐! 我实际上遇到很多困难来解决我遇到的问题,可能是因为我对C ++的熟悉程度
我在Raspberry Zero W上下载并安装了一个库,以获取Radio包和另一个在OLED LCD上显示消息的库。 RadioHead OLED 两者都可以独立工作。
然而,当我在Raspberry上收到无线电数据时,我想将它显示在我的液晶显示器上。
让我为您提供最多的细节:
首先请记住,安装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 /本地/ 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
要收听将收听Radio sender模块发送的数据的脚本,我在编译后启动以下脚本 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: 在函数
__static_initialization_and_destruction_0(int, int)': rf95_server.cpp:(.text+0x438): undefined reference to
中ArduiPi_OLED :: ArduiPi_OLED()'rf95_server.o:在函数中 Adafruit_GFX的Adafruit_GFX::~Adafruit_GFX()': rf95_server.cpp:(.text._ZN12Adafruit_GFXD2Ev[_ZN12Adafruit_GFXD5Ev]+0x30): undefined reference to
vtable'rf95_server.o:In 函数ArduiPi_OLED::~ArduiPi_OLED()': rf95_server.cpp:(.text._ZN12ArduiPi_OLEDD2Ev[_ZN12ArduiPi_OLEDD5Ev]+0x38): undefined reference to
vtable for ArduiPi_OLED'collect2:error:ld 返回1退出状态Makefile:45:目标'rf95_server'的配方 失败了:*** [rf95_server]错误1
如果我评论以下
ArduiPi_OLED display;
没有错误消息。
我认为问题是因为我的rf95_server.cpp无法找到对ArduiPi_OLED库的引用,这是我的问题,因为我不知道该怎么做。
首先,我希望在make命令中添加一个选项
sudo make -I [path-of-ArduiPi_OLED]
我不知道-I是否正确 我不知道如何格式化路径
我还尝试通过在INCLUDE之前添加以下内容并修改INCLUDE行来修改Makefile:
OLEDBASE = ../../../../ArduiPi_OLED
INCLUDE = -I$(RADIOHEADBASE) -I$(OLEDBASE)
但这都不起作用。
所以我的问题:如何将ArduiPi_OLED包含在一个“属于”radioHead的rf95_server.cpp脚本中?
许多人感谢你的帮助
答案 0 :(得分:2)
我想你忘了链接ArduiPi_OLED库了。您需要在makefile中修改LIBS变量:
LIBS = -lbcm2835 -lArduiPi_OLED
此外,如果您使用#include <ArduiPi_OLED.h>
包含库标头,编译器将自动在系统路径中查找标头/usr/local/include
。 (例如,参见this thread)