【问题标题】:create share library with WiringPI使用 WiringPI 创建共享库
【发布时间】:2018-11-22 08:34:20
【问题描述】:

我想创建一个共享库,因为 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 的库?

【问题讨论】:

  • -lWiringPi ?您可能需要一个 -L 参数来告诉链接器在哪里查找。

标签: java gcc java-native-interface wiringpi


【解决方案1】:

根据您使用的 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
  1. -lwiringPi -- 获取您的wiringPi
  2. -lrt 和 -lm -- 负责链接到 WiringPi 本身中的依赖项

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2011-03-11
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多