ユビキタスネットワーク全スタックエンジニア学習ノートのMQTT実験

3315 ワード

ここでは、今日実験中に遭遇したピットを記録します.主にLinuxでの環境変数構成の問題です.具体的には、1、コンパイルクライアントMQTTClient_publishとsubscribeではgccのコンパイルリンク環境を構成する必要があります
  • 共有ライブラリが存在するディレクトリを構成し、解凍された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の末尾に/を加え、経路が一致しているようにしてコンパイルされた.このレコードのみは、後でこのような問題が発生した場合に表示されます.ここでは、環境変数の構成に重点を置きます.