java - 使用 WiringPI 创建共享库
问题描述
我想创建一个共享库,因为 JNI 需要它。
我有两个文件
压电扬声器.c
#include "PiezoSpeaker.h"
#include <stdio.h>
#include <string.h>
#include <wiringPi.h>
#include <softTone.h>
JNIEXPORT void JNICALL Java_PiezoSpeaker_tone__I
(JNIEnv *env, jobject jobject, jint khz) {
wiringPiSetup();
softToneCreate(29);
softToneWrite (29, khz);
}
JNIEXPORT void JNICALL Java_PiezoSpeaker_tone__II
(JNIEnv *env, jobject jobject, jint khz, jint duration) {
}
和
压电扬声器.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class PiezoSpeaker */
#ifndef _Included_PiezoSpeaker
#define _Included_PiezoSpeaker
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: PiezoSpeaker
* Method: tone
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_PiezoSpeaker_tone__I
(JNIEnv *, jobject, jint);
/*
* Class: PiezoSpeaker
* Method: tone
* Signature: (II)V
*/
JNIEXPORT void JNICALL Java_PiezoSpeaker_tone__II
(JNIEnv *, jobject, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
我用 gcc 编译这个
gcc -c -fPIC -I"/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/include/" -I"/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/include/linux" -IwiringPi -Ipthread PiezoSpeaker.c
gcc -shared -o share.so PiezoSpeaker.o
我成为错误,符号未定义。gcc 命令是错误的,因为它不包含wiringPi 库。如何链接包含 WiringPi Lib 的库?
解决方案
根据您使用的 WiringPi 版本以及构建和安装它的方式,调用可能会发生变化。假设您在带有WiringPi - github(不是已弃用的版本,而是非官方镜像)的 Rasberry Pi 上,并且您已在本地将 repo 克隆到您的 Rasberry Pi 中。
cd WiringPi
./build
# add /usr/local/lib to /etc/ld.so.conf
sudo ldconfig
以上取自WiringPi INSTALL
然后为您编译行,您将需要
gcc -c -fPIC -I"/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/include/" -I"/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/include/linux" -lwiringPi -pthread -lrt -lm PiezoSpeaker.c
- -lwiringPi——让你获得wiringPi
- -lrt 和 -lm -- 负责链接到wiringPi 本身的依赖项
推荐阅读
- reactjs - 在 React 中更新呈现形式的函数
- android - 如何从我的 Android 应用程序中打开默认邮件应用程序收件箱?
- spring-boot - 如何从我们的 Spring Boot 微服务向外部服务器请求给定 ID 的数据?
- react-native - 在 react-native 的函数中执行代码后如何导航到另一个页面
- c# - 如何在 sql 存储过程和 c# 之间将 Nvarchar 数据类型转换为 int?
- php - SQL / PHP - 只显示我的数据库的第一个值
- php - 错误“抱歉,找不到您要查找的页面。” 拉拉维尔 5.5
- mysql - mysqli:根据某些参数将行合并为 1
- nao-robot - 自动运行应用程序对话框
- php - 无法使用 file_get_contents() 从 API 中提取数据