コンパイルエラーのご相談 

Arduino に関するご質問などはこちらへ。

コンパイルエラーのご相談 

投稿記事by tomy » 2013年12月04日(水) 09:57

不可解なコンパイル(リンク)エラーで困っています。
ソースコードを添付しますので、ご教授お願いいたします。
添付ファイル
MQTT-Smake10.png
MQTT-Smake10.png (49 KiB) 表示数: 21825 回
sourceCode.zip
ソースコード(ライブラリ)と スケッチ(ino)です。
(37.58 KiB) ダウンロード数: 1178 回
tomy
 
記事: 4
登録日時: 2013年12月03日(火) 21:47

Re: コンパイルエラーのご相談 

投稿記事by yamaguch » 2013年12月04日(水) 16:10

こんにちは、

添付されていた zip ファイルを 1.0.5 でコンパイルしたところ、アクセス制御のエラーなどが出てしまい、リンクまで進みません。

MqttsClient.h:189: error: 'int MqttsClient::connect()' is private
MqttsClient.h:196: error: 'uint8_t MqttsClient::getMsgRequestType()' is private
MqttsClient.h:197: error: 'uint8_t MqttsClient::getMsgRequestStatus()' is private
MqttsClient.h:198: error: 'uint8_t MqttsClient::getMsgRequestCount()' is private
MqttsClientAppFw4Arduino.cpp:290: error: 'class MqttsClient' has no member named 'execMsgRequest'
...
もしかしてソースコードが古いとかいうことはありませんか?

詳細メッセージを出すように指定して、出てきたメッセージを貼っておきます。
ウィンドウを横にうんと広げて見てください。
コード: 全て選択
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/variants/standard -I/Users/yamaguchi/Documents/Arduino/libraries/MQTTS_Arduino_defs -I/Users/yamaguchi/Documents/Arduino/libraries/ZBeeStack -I/Users/yamaguchi/Documents/Arduino/libraries/MQTTS -I/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino -I/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient -I/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial /var/folders/qs/wvp9bsz57xnfqmpxkxr6_61m0000gp/T/build5446812573651782831.tmp/TomyClient.cpp -o /var/folders/qs/wvp9bsz57xnfqmpxkxr6_61m0000gp/T/build5446812573651782831.tmp/TomyClient.cpp.o
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/variants/standard -I/Users/yamaguchi/Documents/Arduino/libraries/MQTTS_Arduino_defs -I/Users/yamaguchi/Documents/Arduino/libraries/ZBeeStack -I/Users/yamaguchi/Documents/Arduino/libraries/MQTTS -I/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino -I/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient -I/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial -I/Users/yamaguchi/Documents/Arduino/libraries/ZBeeStack/utility /Users/yamaguchi/Documents/Arduino/libraries/ZBeeStack/ZBeeStack.cpp -o /var/folders/qs/wvp9bsz57xnfqmpxkxr6_61m0000gp/T/build5446812573651782831.tmp/ZBeeStack/ZBeeStack.cpp.o
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/variants/standard -I/Users/yamaguchi/Documents/Arduino/libraries/MQTTS_Arduino_defs -I/Users/yamaguchi/Documents/Arduino/libraries/ZBeeStack -I/Users/yamaguchi/Documents/Arduino/libraries/MQTTS -I/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino -I/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient -I/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial -I/Users/yamaguchi/Documents/Arduino/libraries/MQTTS/utility /Users/yamaguchi/Documents/Arduino/libraries/MQTTS/MQTTS.cpp -o /var/folders/qs/wvp9bsz57xnfqmpxkxr6_61m0000gp/T/build5446812573651782831.tmp/MQTTS/MQTTS.cpp.o
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino -I/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/variants/standard -I/Users/yamaguchi/Documents/Arduino/libraries/MQTTS_Arduino_defs -I/Users/yamaguchi/Documents/Arduino/libraries/ZBeeStack -I/Users/yamaguchi/Documents/Arduino/libraries/MQTTS -I/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino -I/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient -I/Applications/Arduino.app/Contents/Resources/Java/libraries/SoftwareSerial -I/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino/utility /Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino/MqttsClientAppFw4Arduino.cpp -o /var/folders/qs/wvp9bsz57xnfqmpxkxr6_61m0000gp/T/build5446812573651782831.tmp/MqttsClientAppFw4Arduino/MqttsClientAppFw4Arduino.cpp.o
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient/MqttsClient.h: In member function 'int MqttsClientApplication::connect()':
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient/MqttsClient.h:189: error: 'int MqttsClient::connect()' is private
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino/MqttsClientAppFw4Arduino.cpp:219: error: within this context
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient/MqttsClient.h: In member function 'uint8_t MqttsClientApplication::getMsgRequestType()':
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient/MqttsClient.h:196: error: 'uint8_t MqttsClient::getMsgRequestType()' is private
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino/MqttsClientAppFw4Arduino.cpp:274: error: within this context
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient/MqttsClient.h: In member function 'uint8_t MqttsClientApplication::getMsgRequestStatus()':
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient/MqttsClient.h:197: error: 'uint8_t MqttsClient::getMsgRequestStatus()' is private
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino/MqttsClientAppFw4Arduino.cpp:278: error: within this context
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient/MqttsClient.h: In member function 'void MqttsClientApplication::clearMsgRequest()':
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient/MqttsClient.h:181: error: 'void MqttsClient::clearMsgRequest()' is private
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino/MqttsClientAppFw4Arduino.cpp:282: error: within this context
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient/MqttsClient.h: In member function 'uint8_t MqttsClientApplication::getMsgRequestCount()':
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient/MqttsClient.h:198: error: 'uint8_t MqttsClient::getMsgRequestCount()' is private
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino/MqttsClientAppFw4Arduino.cpp:286: error: within this context
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino/MqttsClientAppFw4Arduino.cpp: In member function 'int MqttsClientApplication::execMsgRequest()':
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino/MqttsClientAppFw4Arduino.cpp:290: error: 'class MqttsClient' has no member named 'execMsgRequest'
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient/MqttsClient.h: In member function 'void MqttsClientApplication::setMsgRequestStatus(uint8_t)':
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClient/MqttsClient.h:199: error: 'void MqttsClient::setMsgRequestStatus(uint8_t)' is private
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino/MqttsClientAppFw4Arduino.cpp:294: error: within this context
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino/MqttsClientAppFw4Arduino.cpp: In member function 'void MqttsClientApplication::run()':
/Users/yamaguchi/Documents/Arduino/libraries/MqttsClientAppFw4Arduino/MqttsClientAppFw4Arduino.cpp:306: error: 'class MqttsClient' has no member named 'run'


山口
yamaguch
 
記事: 482
登録日時: 2010年7月06日(火) 17:37

Re: コンパイルエラーのご相談 

投稿記事by yamaguch » 2013年12月04日(水) 19:09

こんにちは、

ZBeeStack.cpp の # または :: がある行を grep してみました。
コード: 全て選択
#ifndef ARDUINO
        #include "MQTTS_Defines.h"
#else
        #include <MQTTS_Arduino_defs.h>
#endif
#ifdef ARDUINO
  #include <ZBeeStack.h>
  #if defined( XBEE_DEBUG) || defined(MQTT_DEBUG)
        #include <SoftwareSerial.h>
  #endif
#endif  /* ARDUINO */
#ifdef MBED
        #include "mbed.h"
        #include "ZBeeStack.h"
#endif /* MBED */
#ifdef LINUX
        #include "ZBeeStack.h"
        #include <stdio.h>
        #include <sys/time.h>
        #include <sys/types.h>
        #include <sys/stat.h>
        #include <unistd.h>
        #include <stdlib.h>
        #include <string.h>
        #include <fcntl.h>
        #include <errno.h>
        #include <termios.h>
#endif /* LINUX */
ZBeeStack::ZBeeStack(){
ZBeeStack::~ZBeeStack(){
bool ZBeeStack::init(const char* nodeId){
int ZBeeStack::send(uint8_t* payload, uint8_t payloadLen, uint8_t option, SendReqType type ){
int ZBeeStack::readPacket(){
int ZBeeStack::readResp(){
void ZBeeStack::setRxHandler(void (*callbackPtr)(ZBResponse* data, int* returnCode)){
XBeeAddress64& ZBeeStack::getRxRemoteAddress64(){
uint16_t ZBeeStack::getRxRemoteAddress16(){
ZBResponse* ZBeeStack::getRxResponse(){
void ZBeeStack::getResponse(ZBResponse& response){
int ZBeeStack::packetHandle(){
void ZBeeStack::setGwAddress(XBeeAddress64& addr64, uint16_t addr16){
void ZBeeStack::setSerialPort(SerialPort *serialPort){
bool ZBeeStack::readApiFrame(uint16_t timeoutMillsec){
void ZBeeStack::readApiFrame(){
void ZBeeStack::sendZBRequest(ZBRequest& request){
void ZBeeStack::sendByte(uint8_t b, bool escape){
void ZBeeStack::resetResponse(){
void ZBeeStack::flush(){
bool ZBeeStack::write(uint8_t val){
bool ZBeeStack::read(uint8_t *buff){
uint8_t ZBeeStack::getAddrByte(uint8_t pos){
#ifdef ARDUINO
XTimer::XTimer(){
void XTimer::start(uint32_t msec){
bool XTimer::isTimeUp(){
bool XTimer::isTimeUp(uint32_t msec){
void XTimer::stop(){
#endif
#ifdef MBED
XTimer::XTimer(){
void XTimer::start(uint32_t msec){
bool XTimer::isTimeUp(){
bool XTimer::isTimeUp(uint32_t msec){
void XTimer::stop(){
#endif
#ifdef LINUX
XTimer::XTimer(){
void XTimer::start(uint32_t msec){
bool XTimer::isTimeUp(){
bool XTimer::isTimeUp(uint32_t msec){
void XTimer::stop(){
#endif
#ifdef ARDUINO
SerialPort::SerialPort(){
void SerialPort::begin(long baudrate){
bool SerialPort::send(unsigned char b){
bool SerialPort::recv(unsigned char* buf){
void SerialPort::flush(void){
#endif /* ARDUINO */
#ifdef MBED
SerialPort::SerialPort(){
void SerialPort::begin(long baudrate){
  _serial->format(8,Serial::None,1);
bool SerialPort::send(unsigned char b){
bool SerialPort::recv(unsigned char* buf){
void SerialPort::flush(void){
#endif /* MBED */
#ifdef LINUX
SerialPort::SerialPort(){
#ifdef XBEE_FLOWCTRL_CRTSCTS
#else
#endif
SerialPort::~SerialPort(){
int SerialPort::begin(const char* devName){
int SerialPort::begin(const char* devName, unsigned int boaurate){
int SerialPort::begin(const char* devName, unsigned int boaurate, bool parity){
int SerialPort::begin(const char* devName, unsigned int boaurate,  bool parity, unsigned int stopbit){
bool SerialPort::send(unsigned char b){
bool SerialPort::recv(unsigned char* buf){
void SerialPort::flush(void){
XBeeAddress64::XBeeAddress64(){
XBeeAddress64::XBeeAddress64(uint32_t msb, uint32_t lsb){
uint32_t XBeeAddress64::getMsb(){
uint32_t XBeeAddress64::getLsb(){
void XBeeAddress64::setMsb(uint32_t msb){
void XBeeAddress64::setLsb(uint32_t lsb){
ZBResponse::ZBResponse(){
uint8_t ZBResponse::getApiId(){
uint8_t ZBResponse::getMsbLength(){
uint8_t ZBResponse::getLsbLength(){
uint8_t ZBResponse::getChecksum(){
uint8_t ZBResponse::getFrameDataLength(){
uint16_t ZBResponse::getPacketLength() {
void ZBResponse::setMsbLength(uint8_t msbLength){
void ZBResponse::setLsbLength(uint8_t lsbLength){
void ZBResponse::setChecksum(uint8_t checksum){
void ZBResponse::setApiId(uint8_t api){
void ZBResponse::setPayloadLength(uint8_t payloadLength){
void ZBResponse::setPayload(uint8_t* payloadPtr){
bool ZBResponse::isAvailable(){
void ZBResponse::setAvailable(bool complete){
bool ZBResponse::isError(){
uint8_t ZBResponse::getErrorCode(){
void ZBResponse::setErrorCode(uint8_t errorCode){
void ZBResponse::reset(){
XBeeAddress64&  ZBResponse::getRemoteAddress64(){
uint16_t ZBResponse::getRemoteAddress16(){
void  ZBResponse::setRemoteAddress64(XBeeAddress64& addr64){
void  ZBResponse::setRemoteAddress16(uint16_t addr16){
uint8_t ZBResponse::getPayload(int index){
uint8_t* ZBResponse::getPayload(){
uint8_t ZBResponse::getPayloadLength(){
uint8_t ZBResponse::getOption(){
void ZBResponse::setOption(uint8_t options){
bool ZBResponse::isBrodcast(){
ZBRequest::ZBRequest(){
uint8_t ZBRequest::getFrameDataLength(){
uint8_t* ZBRequest::getPayload(){
uint8_t ZBRequest::getPayloadLength(){
uint8_t ZBRequest::getBroadcastRadius(){
uint8_t ZBRequest::getOption(){
void ZBRequest::setBroadcastRadius(uint8_t broadcastRadius){
void ZBRequest::setOption(uint8_t option){
void ZBRequest::setPayload(uint8_t *payload){
void ZBRequest::setPayloadLength(uint8_t payLoadLength){
#endif  /* LINUX */

まん中辺りの
コード: 全て選択
#ifdef LINUX
SerialPort::SerialPort(){
#ifdef XBEE_FLOWCTRL_CRTSCTS
#else
#endif
SerialPort::~SerialPort(){
int SerialPort::begin(const char* devName){
のあとは、最後まで # は出てきません。
ということは SerialPort::~SerialPort() 以降のメンバ関数は Arduino では無視されてしまうような気がします。
この中にはZBResponseクラスなんかも入っています。

山口
yamaguch
 
記事: 482
登録日時: 2010年7月06日(火) 17:37

Re: コンパイルエラーのご相談 

投稿記事by tomy » 2013年12月04日(水) 22:40

ご指摘の通りバージョン違いでしたので、改めてコードを添付します。

また、#if #endif がオカシイのではということですが、eclipseのエディターが無効範囲をグレー表示するので確認したところ問題はありませんでした。
引き続き、よろしくお願いいたします。
添付ファイル
sourceCode.zip
(33.62 KiB) ダウンロード数: 1111 回
tomy
 
記事: 4
登録日時: 2013年12月03日(火) 21:47

Re: コンパイルエラーのご相談 

投稿記事by tomy » 2013年12月04日(水) 23:16

ありがとうございました。

やはり、 #endif が問題でした。 コンパイル通りました。
このプログラムは XBeeとMQTT-SNプロトコルの組合せで、MQTTプローカーと通信するクライアントソフトですので、利用範囲は広いと思います。
MQTT-SNのゲートウェイはRaspberry Pi に実装できると思います。 よかったら使ってみて下さい。

ツボにはまって抜けられなくなっていたので、ご教授いただきありがとうございました。
今後共よろしくお願いいたします。
tomy
 
記事: 4
登録日時: 2013年12月03日(火) 21:47

Re: コンパイルエラーのご相談 

投稿記事by yamaguch » 2013年12月05日(木) 12:08

tomy さん、

再度添付して頂いた zip ファイルは、うまく開きませんでしたが、解決できてよかったです。
MQTT は TCP/IP ベースのようなので、XBee のゲートウェイがあると適用範囲が広がりますね。

山口
yamaguch
 
記事: 482
登録日時: 2010年7月06日(火) 17:37

Re: コンパイルエラーのご相談 

投稿記事by tomy » 2013年12月07日(土) 01:57

MQTT-SN のクライアントと、それをTCP/IPでブローカーに接続するゲートウェイのプログラムを公開しています。
クライアントはLinuxとArduinoで稼働。 ゲートウェイはLinuxのみ稼働。

https://github.com/TomoakiYAMAGUCHI/MQTT-S.git
https://github.com/TomoakiYAMAGUCHI/MQTT-S-Gateway.git

ゲートウェイはRaspberry Pi にも実装してみるつもりです。
クライアントはmbedにも実装する予定ですが、シリアル通信エラーが出ています。
Arduinoと同様にUART割込みを使用せずに読み込みたいので、今少し研究が必要です。
tomy
 
記事: 4
登録日時: 2013年12月03日(火) 21:47


Return to Arduino 質問箱

cron