3

私は AppWeb を使用しようとしています。AppWeb ライブラリの関数を使用して、AppWeb をアプリケーションに埋め込むための非常に単純なプログラムを作成しました。

#include <appweb/appweb.h>
int main(int argc, char** argv)
{
    return maRunWebServer("appweb.conf");
}

gcc (または cc) でいつコンパイルしたかわかりませんが、正常にコンパイルされました。しかし、Arm アーキテクチャにクロスコンパイルすると、エラーが発生します。これは私の Makefile です:

CC = gcc

LIBS = lib

FLAG = -lappweb -lmpr

TEST_TARGET = embed-appweb
OBJS = embed-appweb

all: clean compile

compile: run
    $(CC) -Wall -L$(LIBS) $(FLAG) -o $(TEST_TARGET) $(OBJS).o

run:
    $(CC) -Wall -L$(LIBS) $(FLAG) -c $(OBJS).c

clean:
    @rm -rf $(TEST_TARGET) $(TEST_TARGET).trc *.o *~
    @echo "Clean complete"

クロスコンパイルするために、「CC = gcc」を「CC = arm-linux-gcc」に置き換えました。私の問題のエラーは次のとおりです。

arm-linux-gcc -Wall -Llib -lappweb -lmpr -c embed-appweb.c
embed-appweb.c:1:27: error: appweb/appweb.h: No such file or directory
embed-appweb.c: In function 'main':
embed-appweb.c:4: warning: implicit declaration of function 'maRunWebServer'
make: *** [run] Error 1

そして、ライブラリ「libappweb.so」が私のフォルダ「lib」に存在していたと確信しています

誰かが私に言うかもしれませんが、なぜエラーが発生したのですか? アドバイスをくれませんか?

ありがとう、

4

3 に答える 3

2

gccの-Iオプションの使い方を知っていますか?

表示されるエラーは、コンパイラ (gcc) がインクルードしたいファイルを見つけることができるという事実によるものです。

最も簡単な解決策は、Makefile の FLAG を変更することです。

FLAG = -lappweb -lmpr

FLAG = -lappweb -lmpr -I/path/to/my/headers

もちろん、/path/to/my/headers をヘッダーが存在する実際のパスに変更する必要があります。

于 2012-01-16T13:26:48.433 に答える
1

appweb ヘッダーを arm-linux-gcc インクルード ツリーにインストール (またはシンボリック リンク) する必要があります。

たとえば、arm-linux-gcc私のシステムの 1 つのコマンドは次のとおりです。

$ which arm-linux-gcc
/home/eldk/usr/bin/arm-linux-gcc

したがって、コンパイラが使用するインクルード ファイルは次のとおりです

 $ arm-linux-gcc -print-search-dirs
install: /home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/
programs: =/home/eldk/usr/bin/../libexec/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../libexec/gcc/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/:/usr/libexec/gcc/arm-linux-gnueabi/4.2.2/:/usr/libexec/gcc/arm-linux-gnueabi/:/home/eldk/usr/libexec/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/bin/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/bin/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/bin/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/bin/
libraries: =/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/:/usr/libexec/gcc/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/lib/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/lib/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/lib/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/../../../../arm-linux-gnueabi/lib/:/home/eldk/usr/../arm/lib/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/../arm/lib/:/home/eldk/usr/../arm/usr/lib/arm-linux-gnueabi/4.2.2/:/home/eldk/usr/../arm/usr/lib/
于 2012-01-16T08:46:11.540 に答える
0

2 つの懸念事項があります。

  1. インクルード検索パス (既に sessyargc.jp と wallyk で指定されている)。
  2. ライブラリ検索パス。

を使用してコンパイルするgccと、gcc 構成を使用して、独自のツールチェーン内のヘッダーとライブラリが検出されます。デフォルトでは、「/usr/include」や「/usr/lib」などになります。

でコンパイルする場合arm-linux-gcc、以前に で行ったようにgcc、構成を使用arm-linux-gccして独自のツールチェーン内のヘッダーとライブラリを見つけます。ツールチェーンに応じて、どこにでも配置できます (つまり、wallyk の場合は「/home/eldk/usr/lib/gcc/arm-linux-gnueabi/4.2.2/...」)。

2 つの異なるツールチェーンがあり、それぞれに独自のファイルがあることに注意してください。

「x86」用にビルドされたライブラリを ARM バイナリにリンクすることはできません。互換性がありません。

gccgcc ライブラリへのarm-linux-gccリンク、arm-linux-gcc ライブラリへのリンク。

異なるプロセッサはエンディアン、データサイズなどの構成が異なる可能性があるため、プレーンテキストのみのヘッダーでさえ同じにすることはできません.

それで

サンプル アプリケーションをコンパイルする前に、ARM 用にクロスコンパイルされたAppWeb をインストールする必要があります。

この後、ツールチェーンappweb/appweb.hから-lappwebアクセスできるようになります。

AppWeb のクロスコンパイル方法についてサポートが必要な場合はお知らせください。それを行う方法を示すソースの README でなければなりません。

于 2012-02-02T16:09:09.967 に答える