ユビキタスネットワーク全スタックエンジニア学習ノートのMQTT実験
ここでは、今日実験中に遭遇したピットを記録します.主にLinuxでの環境変数構成の問題です.具体的には、1、コンパイルクライアントMQTTClient_publishとsubscribeではgccのコンパイルリンク環境を構成する必要があります共有ライブラリが存在するディレクトリを構成し、解凍された ヘッダファイルが存在するディレクトリを構成し、
以上の2つの方法を経てもだめで、コンパイルはやはり通過しないで、以下の内容を提示します:
後で先生に教えてもらうと、環境変数が設定されていない可能性があるので、環境変数も設定されています.環境変数を設定する方法は以下の3つあります.
方法2、/etc/profileに
初めて構成したばかりなのにコンパイルしたが、後で経路LDの経路に気づいたのは、LDの経路と環境変数の経路が一致していないためであり、解決方法はsudo cp-rf lib/*/usr/libの末尾に/を加え、経路が一致しているようにしてコンパイルされた.このレコードのみは、後でこのような問題が発生した場合に表示されます.ここでは、環境変数の構成に重点を置きます.
wxd@ubuntu:/home/work/IoT_Developer/mqtt/Eclipse-Paho-MQTT-C-1.3.2-Linux$
ディレクトリの下で次のコマンドを実行します.export LD_LIBRARY_PATH=${PWD}/lib/
、echo$LD_を使用できます.LIBRARY_PATHコマンドは構成結果を表示する;wxd@ubuntu:/home/work/IoT_Developer/mqtt/Eclipse-Paho-MQTT-C-1.3.2-Linux$
ディレクトリの下で以下のコマンドを実行します:export C_INCLUDE_PATH=${PWD}/include/
、echo $C_INCLUDE_PATH
コマンドを使用して結果を表示することができます;2、上記の方法で環境プロンプトをコンパイルしてlibライブラリが見つからない場合は、/usr/includeと/usr/lib/ディレクトリに直接コピーできます.wxd@ubuntu:/home/work/IoT_Developer/mqtt/Eclipse-Paho-MQTT-C-1.3.2-Linux$ sudo cp -rf include/* /usr/include/
wxd@ubuntu:/home/work/IoT_Developer/mqtt/Eclipse-Paho-MQTT-C-1.3.2-Linux$ sudo cp -rf lib/* /usr/lib/
以上の2つの方法を経てもだめで、コンパイルはやはり通過しないで、以下の内容を提示します:
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libpaho-mqtt3c.a(MQTTClient.c.o): In function `MQTTClient_init':
/home/travis/build/eclipse/paho.mqtt.c/src/MQTTClient.c:260: undefined reference to `pthread_mutexattr_init'
/home/travis/build/eclipse/paho.mqtt.c/src/MQTTClient.c:262: undefined reference to `pthread_mutexattr_settype'
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libpaho-mqtt3c.a(MQTTClient.c.o): unrecognized relocation (0x2a) in section `.text'
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
後で先生に教えてもらうと、環境変数が設定されていない可能性があるので、環境変数も設定されています.環境変数を設定する方法は以下の3つあります.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
方法2、/etc/profileに
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
を追加して実行する.etc/profile(注意.と/の間にスペースがある)方法3、/etc/ld.so.confにライブラリファイルパス/usr/local/libを追加し、sudo ldconfigを実行して有効にします.初めて構成したばかりなのにコンパイルしたが、後で経路LDの経路に気づいたのは、LDの経路と環境変数の経路が一致していないためであり、解決方法はsudo cp-rf lib/*/usr/libの末尾に/を加え、経路が一致しているようにしてコンパイルされた.このレコードのみは、後でこのような問題が発生した場合に表示されます.ここでは、環境変数の構成に重点を置きます.