树莓派:pi 4 B
系统:树莓派官网的ubuntu 22.04版
1 修改软件源为国内。注意树莓派是arm架构,需要用ports源,最开始就是在这栽跟头了。
sudo vim /etc/apt/sources.list
:%s/ports.ubuntu.com/mirrors.aliyun.com/g
:x
sudo apt update
详细请参考:Linux:Ubuntu 国内源介绍_Brendon_Tan的博客-CSDN博客
2 下载安装gcc7.5版本
sudo apt install gcc-7 g++-7
# 查看安装版本
gcc -V
3 安装make
sudo apt install make
4 因为我的c++代码想用cmake自动链接静态库编译,所以有这一步。不需要可不安装。
wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz
tar -xzvf cmake-3.5.tar.gz
cd cmake-3.5./
./bootstrap
make .
sudo make install
5 安装WiringPi 64位。
用命令sudo apt install wiringpi 直接安装可以成功安装,但是架构不匹配不能使用gpio命令。
wget https://gitee.com/LJYSCIENTIST/raspberry-pi-software-storage/raw/master/wiringpi-2.60-1_arm64.deb # 文件包将下载到当前目录,安装完后可以删除
sudo apt-get install ./wiringpi-2.60-1_arm64.deb # 安装
gpio -v # 查看是否安装成功,查看版本
gpio readall # 查看针脚
参考自:树莓派WiringPi64位支持(树莓派4B) - 哔哩哔哩
6 在CMakeLists.txt链接wiringpi库,参考以下c++添加库操作的方法3
7 测试点亮小灯和按钮
详情请参考:
TinkerBoard开发板使用C++检测独立按键是否被按下_c++ pullupdncontrol_hehui0921的博客-CSDN博客
更多功能函数参考:
cmake 添加外部静态/动态 库操作(以jsoncpp为例):
1 从源码开始,下载源码
1.1 直接导入源码
1)将下载后的zip解压后,在要添加该库的项目下创建目录如jsoncpp。
2)将include/json下的所有头文件复制到jsoncpp下;src/lib_json下的所有文件复制到jsoncpp下(特别注意cpp文件,也可以复制到main.cpp同级下)。
3)在已有的CMakeLists.txt文件里加入以下内容
# 把对应的cpp文件添加到此处,注意cpp的层级关系
add_executable(Test native-lib.cpp json_reader.cpp json_value.cpp json_writer.cpp)
add_library( # Sets the name of the library.
myJNI
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
# 复制的哪些头文件就写哪些
jsoncpp/json_tool.h
jsoncpp/json_reader.cpp
jsoncpp/json_valueiterator.inl
jsoncpp/json_value.cpp
jsoncpp/json_writer.cpp
jsoncpp/assertions.h
jsoncpp/autolink.h
jsoncpp/config.h
jsoncpp/features.h
jsoncpp/forwards.h
jsoncpp/json.h
jsoncpp/reader.h
jsoncpp/value.h
jsoncpp/version.h
jsoncpp/writer.h
)
1.2 将源码编译为静态/动态链接库导入
1)将下载后的zip解压后,在源码项目下根据已有的CMakeLists.txt 编译生成.a 或.so文件。(注意一定要在本机编译,不能直接用其他机器编译好的,因为路径不一样)
2)在已有的CMakeLists.txt文件里加入以下内容
add_library( json_vc71_libmtd STATIC IMPORTED ) # json_vc71_libmtd 为库名
set_target_properties( json_vc71_libmtd PROPERTIES IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/lib/json_vc71_libmtd.lib ) # 静态库的路径
target_link_libraries(CMake-lida PUBLIC json_vc71_libmtd) # CMake-lida项目名称
1.3 ubuntu apt下载已有的安装包
1)用命令安装对应的库文件(安装好后,头文件一般在/usr/include/jsoncpp/json/,静/动态库一般在/usr/lib/或/usr/lib/x84_64-linux-gnu下)
sudo apt install libjsoncpp-dev
2)在已有的CMakeLists.txt文件里加入以下内容
set(lib_DIR /usr/lib/x84_64-linux-gnu)
link_directories(${lib_DIR})
target_link_libraries(Test libjsoncpp.so)
最后两种方式理论上应该是差不多的功能,但是我对cmake语法不是很熟,就先这样写吧……
用以下命令测试是否成功,通常导入后都需要修改头文件中互相引用时的路径,问题不大。
cmake .
make
./Test
文章若有遗漏或不足,还请指正。