2017-04-16 24 views
0

私はUbuntu Linux、Eclipse Neon、およびarm-linux-gnueabihfツールチェーンを使用して、Raspberry Piのアプリケーションをクロスコンパイルしています。 Eclipseは一般的にはこれでうまくいきます。私は通常、コンパイルしてアプリをリンクし、RPiにscpし、RPiで実行することができます。gnueabihfクロスツールチェーンを使用してEclipseでCGICCをリンクする

最近、CGICCライブラリを追加する必要がありました。最初にPiにライブラリをインストールし、シンプルなC++アプリケーションを構築し、問題なくRPi上にビルドして実行しました。それは、ライブラリがRPiに正しくインストールされているということです。

私はLinuxマシンにライブラリをコピーしていましたので、LinuxマシンでRPi上で実行されるアプリケーションを開発する際に使用することができました。そこで、RPiからLinuxマシンに次のファイルをコピーしました。

RPiからLinuxマシンの/ usr/arm-linux-gnueabihf/includeへの/ usr/include/cgiccフォルダ。 RPiから28個のファイルが/ usr/arm-linux-gnueabihf/includeにある新しいCGICCフォルダにコピーされました。 Linuxマシンはすべてのインクルードファイルを持つべきです。

/usr/lib/libcgicc*.* Linuxマシンの/ usr/arm-linux-gnueabihf/libへのRPiからのファイル(3ファイル)。 RPiにも2つのシンボリックリンクがありました。私はLinuxマシン上でシンボリックリンクを作った。この時点で、ライブラリはRPiからLinuxマシンに移行されたようです。 Eclipseで

私は単純なプロジェクト作成:

#include <iostream> 
#include <cgicc/CgiDefs.h> 
#include <cgicc/Cgicc.h> 
#include <cgicc/HTTPHTMLHeader.h> 
#include <cgicc/HTMLClasses.h> 

using namespace std; 
using namespace cgicc; 

int main() { 
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!! 

    Cgicc formData; 
    form_iterator fChannel = formData.getElement("servochannel"); 

    if (fChannel != (*formData).end() && !fChannel->isEmpty()) { 
     int channelNumber = atoi(fChannel->getValue().c_str()); 
    } 

    return 0; 
} 

を、次のように私は、プロジェクトのプロパティを設定します。 C/C++ビルド/設定/クロスG ++コンパイラは、/は/ usr /腕-linuxの-gnueabihfに含まれてい/ include。 /usr/arm-linux-gnueablihf/libへのciccおよびライブラリ検索パスへのC/C++ビルド/設定/クロスG ++リンカー/ライブラリ。

Cross G++ Compiler Includes Settings Gross G++ Linker Libraries Settings

私はプロジェクトをビルドすると、プロジェクトがコンパイルされますが、リンカは、2件のエラーメッセージがスローされます。cgicc::Cgicc::getElement undefined reference to cgiccへ

未定義の参照:: FormEntryを::のgetValue

それはありませんソースファイル "Cgicc formData;"の行について文句を言うそれはCGICCに関連する1行おきに文句を言う。

どうしたのですか?私はスタックオーバーフローや他の場所を探して、今一週間これを戦ってきました。誰かが私を助けることを願っています。私は、RPiを編集し、構築し、テストすることに飽き飽きしています。

答えて

0

解決策!

問題は、RPi上のライブラリが、Eclipseマシン上のgccコンパイラとは異なるバージョンでコンパイルされていたことでした。 RPiバージョンをEclipseマシン上の新しいバージョンに更新することはできません。つまり、コンパイルされたコードとライブラリの間のインターフェイスが互換性がなく、私が経験していたライブラリの問題につながる可能性があります。

最新のバージョンのcgiccライブラリをEclipseマシンにダウンロードし、armhfクロスコンパイラを使用してライブラリをビルドすることでした。これにより、同じバージョンのライブラリがRPiと開発マシンの両方に置かれました。cgiccはAutomakeにを使用しているため

、適切なコマンドは以下のとおりです。

./configure CXX=arm-linux-gnueabihf-g++ libdir=/usr/cgicc/lib includedir=/usr/cgicc/include 
make 
sudo make install 

その後Eclipseのが、/ usr/cgicc /含めると/ usr/cgiccで含めるとライブラリファイルを探すように設定する必要があります/ libフォルダ。

その後、RPiの/ usr/lib/cgi-binフォルダに自分のアプリを構築して実行することができました。

関連する問題