создать общую библиотеку с WiringPI - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу создать общую библиотеку, потому что мне это нужно для JNI.

У меня есть два файла

PiezoSpeaker.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) {

}

и

PiezoSpeaker.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?

1 Ответ

0 голосов
/ 09 августа 2019

В зависимости от версии WiringPi, которую вы используете, и того, как вы его создали и установили, вызов может измениться.Предполагая, что вы используете Rasberry Pi с WiringPi - github (не устаревшей версией, а неофициальным зеркалом), и вы локально клонировали репо в свой Rasberry Pi.

cd WiringPi
./build 
# add /usr/local/lib to /etc/ld.so.conf
sudo ldconfig

Выше естьвозьмите с WiringPi УСТАНОВИТЕ

Тогда для вашей строки компиляции вам понадобится

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 - получает вам проводку Pi
  2. -lrt и -lm - позаботьтесь о связывании с зависимостями внутри самого wiringPi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...