0

私は最近、Linux で関数 clock_gettime() を利用する C でプロジェクトを開発しました。私の Ubuntu デスクトップでのこのリンクは、リンカー フラグを使用して実現されます。

gcc -lrt foo.c

以下の投稿で、自分のプロジェクトを Android 用にクロスコンパイルできることを読んで興奮しました。

http://benno.id.au/blog/2007/11/13/android-native-apps

次のコマンドを使用して、簡単なプロジェクトでこれを試しました。

arm-linux-gnueabi-gcc -static foo.c -o foo

コマンドではなく:

arm-none-linux-gnueabi-gcc -static foo.c -o foo

リンクで参照されており、実際には正常にコンパイルおよびリンクされますが、clock_gettime() とリンクが必要なプロジェクトで試してみると、次のようになります。

-ltr

次のエラーで失敗します。

undefined reference to `clock_gettime'

-lrt で指定されたライブラリが Android 用に存在しないことを読み、人々が Android プロジェクトで clock_gettime() を使用していると主張する他の場所の投稿を見つけましたが、適切なライブラリを見つけることができませんでしたこのためにリンクします。ARMがこれを機能させるために何にリンクする必要があるか誰か教えてもらえますか?

または、Android で動作する代替案について他の提案をしてください。

デスクトップ Linux プロジェクトの既存のメイクファイルをできる限り活用することに非常に関心がありますが、可能であればクロスコンパイル ツール チェーンで動作するように再構成するので、それを可能にする提案があれば非常に高く評価されます。

4

1 に答える 1

1

Android の「bionic」C ライブラリには、clock_gettime()syscall のラッパーがあります。Android NDK を使用してビルドすると、自動的に取得されます。それ以外の場合は、何らかの方法でツールチェーンにバイオニック ライブラリを追加する必要があります。

あるいは、アセンブリ経由でシステムコールを直接呼び出すこともできます (メモリから、最初の引数は R0 に、2 番目の引数は R1 に、システムコール番号を R7 に入れ、"SWI $0" を発行し、R0 で結果コードを見つけます)。

あるいは、なぜ clock_gettime を気にしているのですか? 単純に gettimeofday() を使用できない理由はありますか?

于 2012-08-03T20:54:37.937 に答える