0

64 ビット マシンを実行している ubuntu 13.04 を最適化して、32 ビット ARM 用にクロスコンパイルし、c/c++ コードを開発することでコードが 32 ビット ARM(BBBlack) で正常に実行されていることを確認しました。達成したいのは、Xively サーバーの更新との接続です。データストリームからフィード/データポイントを取得します。

それで、Xively の c ライブラリを利用して、私の Ubuntu Eclipse 開発環境で使用することを考えて います。

クロスコンパイルの問題はありますか? またはそれはすべて大丈夫ですか?

以下は、実行したときに得られるものです >> make -C src CC=arm-linux-eabi-gcc AR=arm-linux-eabi-gcc examples

make: *** src: No such file or directory.  Stop.
nishant@Nishant-K53SC:~$ cd libxively
nishant@Nishant-K53SC:~/libxively$ make -C src CC=arm-linux-eabi-gcc AR=arm-linux-eabi-gcc libxively
make: Entering directory `/home/nishant/libxively/src'
make -C libxively
make[1]: Entering directory `/home/nishant/libxively/src/libxively'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/nishant/libxively/src/libxively'
make: Leaving directory `/home/nishant/libxively/src'
nishant@Nishant-K53SC:~/libxively$ make -C src CC=arm-linux-eabi-gcc AR=arm-linux-eabi-gcc libxively
make: Entering directory `/home/nishant/libxively/src'
make -C libxively
make[1]: Entering directory `/home/nishant/libxively/src/libxively'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/nishant/libxively/src/libxively'
make: Leaving directory `/home/nishant/libxively/src'
nishant@Nishant-K53SC:~/libxively$ make -C src CC=arm-linux-eabi-gcc AR=arm-linux-eabi-gcc examples
make: Entering directory `/home/nishant/libxively/src'
make -C examples
make[1]: Entering directory `/home/nishant/libxively/src/examples'
for dir in datapoint_delete datapoint_delete_range datastream_create datastream_delete datastream_get datastream_update feed_get feed_update; do (make -C $dir) || exit 1; done
make[2]: Entering directory `/home/nishant/libxively/src/examples/datapoint_delete'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/nishant/libxively/src/examples/datapoint_delete'
make[2]: Entering directory `/home/nishant/libxively/src/examples/datapoint_delete_range'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/nishant/libxively/src/examples/datapoint_delete_range'
make[2]: Entering directory `/home/nishant/libxively/src/examples/datastream_create'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/nishant/libxively/src/examples/datastream_create'
make[2]: Entering directory `/home/nishant/libxively/src/examples/datastream_delete'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/nishant/libxively/src/examples/datastream_delete'
make[2]: Entering directory `/home/nishant/libxively/src/examples/datastream_get'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/nishant/libxively/src/examples/datastream_get'
make[2]: Entering directory `/home/nishant/libxively/src/examples/datastream_update'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/nishant/libxively/src/examples/datastream_update'
make[2]: Entering directory `/home/nishant/libxively/src/examples/feed_get'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/nishant/libxively/src/examples/feed_get'
make[2]: Entering directory `/home/nishant/libxively/src/examples/feed_update'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/home/nishant/libxively/src/examples/feed_update'
make[1]: Leaving directory `/home/nishant/libxively/src/examples'
make: Leaving directory `/home/nishant/libxively/src'

ライブラリを使用したビルド中の更新エラー:

プロジェクト Test の構成デバッグのビルド **

make all 
Building file: ../src/Test.cpp
Invoking: GCC C++ Compiler
arm-linux-gnueabi-g++ -I/usr/arm-linux-gnueabi/include/c++/4.7.3 -I/home/nishant/libxively/src/libxively -I/usr/arm-linux-gnueabi/include/c++/4.7.3/bits -I/usr/arm-linux-gnueabi/include/c++/4.7.3/ext -I/usr/arm-linux-gnueabi/include/c++/4.7.3/arm-linux-gnueabi -I/usr/arm-linux-gnueabi/include/c++/4.7.3/backward -I/usr/arm-linux-gnueabi/include/c++/4.7.3/decimal -includexively.h -includexi_helpers.h -includexi_err.h -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/Test.d" -MT"src/Test.d" -o "src/Test.o" "../src/Test.cpp"
/home/nishant/workspace/Test/src/libxively.a: could not read symbols: File format not recognized
Finished building: ../src/Test.cpp

collect2: error: ld returned 1 exit status
Building target: Test
make: *** [Test] Error 1
Invoking: GCC C++ Linker
arm-linux-gnueabi-g++ -L/home/nishant/workspace/Test/src -L/usr/arm-linux-gnueabi/lib -o "Test"  ./src/Test.o   -lxively

**** Build Finished ****
4

1 に答える 1

1

Xively C ライブラリは、32 ビットおよび 64 ビットの POSIX OS と、lwIP を使用するさまざまな RTOS で動作するはずです。

を使用してライブラリをクロス コンパイルするarm-linux-eabi-gccには、最上位ディレクトリで次のコマンドを実行する必要があります。

make -C src CC=arm-linux-eabi-gcc AR=arm-linux-eabi-gcc libxively
make -C src CC=arm-linux-eabi-gcc AR=arm-linux-eabi-gcc examples

詳細な手順

以下に、簡単なサンプル C プログラムをコンパイルし、それを Xively ライブラリに静的にリンクする方法を説明します。これで十分な背景情報が得られるはずです。ただし、Eclipse IDE を修正する方法についての情報を提供することはできません。

  1. ディレクトリを作成し、ライブラリを複製します。

    mkdir hello_xively
    cd hello_xively
    git clone --recursive https://github.com/xively/libxively
    
  2. 次のようにファイルを追加しtest.cます。

    #include "xively.h"
    
    int main() {
    
      xi_context_t* ctx = xi_create_context( XI_HTTP, "DUMMY_API_KEY_STRING", 123 );
      xi_delete_context( ctx );
      return 0;
    };
    
  3. ライブラリ自体をビルドします (ターゲットのと の値が異なる場合があることに注意してくださいCCAR) :

    export CC=arm-linux-eabi-gcc  # C compiler fron-end for the ARM Linux target
    export AR=arm-linux-eabi-ar   # This is needed for the build to work
    export XI=`pwd`/libxively.a   # To store the output in current direcory
    make -C libxively/src libxively
    
  4. コンパイルtest.cしてスタティック ライブラリとリンクします。

    $CC test.c \
      -I./libxively/src/libxively \
      libxively.a -o xively_static_test
    

これで、実行可能ファイルをターゲット デバイスのファイル システムにコピーしてxively_static_test実行できます。これはテスト例であるため、出力は生成されません。いいえ、上記の例を拡張して、必要な機能を提供できます!

于 2013-09-12T16:43:09.133 に答える