在共享库中使用python中的c++代码来控制LCD
using c++ code from python in a shared-lib to control an LCD
我的项目是用ST7565控制器控制我的树莓B2上的LCD我试图使用这个c++代码,控制lcd:https://github.com/stephanel/ST7565-RPi
不幸的是,我不熟悉C语言编程,因此我想用ctypes从python调用c++函数。
我写了一个简单的(对我来说很简单)c++代码用作共享库
lcdcontrol.cpp:
#include <iostream>
#include <ctime>
#include <sstream>
#include <wiringPi.h>
#include <wiringShift.h>
#include "ST7565/ST7565.cpp"
using namespace std;
ST7565 glcd(PIN_SID, PIN_SCLK, PIN_A0, PIN_RST, PIN_CS);
void start();
void drawclock();
void setpix();
void clear();
void drawstring();
void drawbitmap();
void start(){
glcd.begin(0x18);
glcd.display();}
void setpix() {
glcd.setpixel(10, 10, BLACK);}
void clear() {
glcd.clear();}
void drawstring() {
glcd.drawstring(0, 0, "Test string");}
我的python测试代码:
#!/usr/bin/python
import os
from ctypes import *
from thread import start_new_thread
lcd_lib = cdll.LoadLibrary("lcdcontrol.so")
mylcd = lcd_lib
mylcd.start()
现在我必须把我的c++代码编译成一个共享库。我尝试了几种方法。但是没有什么是没有问题的。当我运行python代码时,它返回它找不到"digitalwrite"函数,这是wiringpi库的一部分,或者我得到一个错误,它找不到"start"函数。
有谁能帮帮我吗?我要疯了……也许有一个完全不同的方式来使用ST7565 c++代码从python。但对我来说,这似乎是最简单的方法……直到现在…因为你不熟悉C语言,我假设你犯了我曾经犯过的同样的错误。在c++中,你不需要关心名称混淆。
见http://en.wikipedia.org/wiki/Nm_%28Unix%29
请演示函数是如何导出的。
Python:使用ctypes访问DLL函数——通过函数*name*访问失败谢谢你的帮助,它工作!
这是我使用的makefile:
all:
g++ -fPIC -shared -o lcdcontrol.so -I/usr/local/include -L/usr/local/lib -lwiringPi lcdcontrol.cpp
sudo cp lcdcontrol.so /usr/lib/lcdcontrol.so
纳米lcdcontrol。所以返回:
(...)
U digitalWrite
(...)
00002968 T _Z10drawstringv
00002a04 t _Z41__static_initialization_and_destruction_0ii
0000293c T _Z5clearv
00002834 T _Z5startv
000028cc T _Z6setpixv
0000bab6 b _ZL10xUpdateMax
0000bab5 b _ZL10xUpdateMin
0000bab8 b _ZL10yUpdateMax
(...)
在我的python代码中,我现在可以使用:
mylcd._Z5startv()
mylcd._Z6setpixv()
mylcd._Z10drawstringv()
它有效!
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- 在c代码之间共享数据的最佳方式
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值