【发布时间】:2020-07-15 20:54:34
【问题描述】:
我正在阅读一本关于 Raspberry Pi 的书以了解 Raspberry Pi。
书中的一个项目展示了一个 C++ 类,它提供了访问 Raspberry Pi 上的 GPIO 的方法;类名是“gpio”。
书中讲述了使用这个类的两种方法:
-
编写 C++ 代码,simple.cpp:在 simple.cpp 中,main 方法实例化 gpio 类并调用其公共方法。
-
要编写 Python 代码:gpio.so 必须使用 Boost.python 创建。然后写simple.py,在里面导入gpio,调用它的public方法。
第一种方法很简单:将simple.cpp和gpio.cpp链接在一起,创建一个单独的exe。
对于后者,本书推荐使用 Boost.Python。
我下载了Boost包,调用bootstrap.sh和b2如下:
$ sudo ./bootstrap.sh --with-libraries=python --with-python-version=3.7
$ sudo ./b2 cxxflags=-fPIC -link=shared install
这些创建了 libboost_python37.so.1.73.0。
我尝试按如下方式构建 gpio.so:
PROG = gpio.so
CC = g++
CPPFLAGS = -c -fPIC -I/usr/include/python3.7m/ -I/usr/local/boost_1_73_0
LDFLAGS = -shared -pthread -L/usr/local/boost_1_73_0/bin.v2/libs/python/build/gcc-
8/release/python-3.7/threading-multi/visibility-hidden
LLIBS = -lboost_python37
OBJS = gpio.o
$(PROG) : $(OBJS)
$(CC) $(LDFLAGS) -o $(PROG) $(OBJS) $(LLIBS)
gpio.o : gpio.h
$(CC) $(CPPFLAGS) -c gpio.cpp
上面创建的 gpio.so 没有任何致命错误。
但如果我执行 'ldd gpio.so',它的输出会显示“libboost_python37.so.1.73.0 => not found”。
如果我运行 simple.py,它的输出显示“ImportError: libboost_python37.so.1.73.0: cannot 打开共享对象文件:没有这样的文件或目录”。
当我使用静态boost python库时,我可以完成上面的第二种方法:从python代码调用C++方法。
我的开发环境是在具有 4GB 内存的 Raspberry Pi 4 型号 B 上。操作系统是 Raspbian GNU/Linux 10 (buster)。开发软件包括:
- 自 2020 年 7 月 15 日起的 Boost 包:修订版 1.73.0。
- Python 3.7.3(32 位)
- g++ (Raspbian 8.3.0-6+rpi1) 8.3.0
【问题讨论】:
标签: shared-libraries static-libraries boost-python