4

LinuxでPOSIXaioライブラリ(aio_read()、aio_write()など)を使用するサンプルプログラムをコンパイルする場合、リンカーに問題があります。

私は2.6カーネルでUbuntuを実行しており、apt-getユーティリティを使用してlibaioをインストールしました。ただし、aioライブラリとリンクしている場合でも、コンパイラによってリンカーエラーが発生します。

root@ubuntu:/home# g++ -L /usr/lib/libaio.a aio.cc -oaio
/tmp/cc5OE58r.o: In function `main':
aio.cc:(.text+0x156): undefined reference to `aio_read'
aio.cc:(.text+0x17b): undefined reference to `aio_error'
aio.cc:(.text+0x191): undefined reference to `aio_return'
collect2: ld returned 1 exit status

ライブラリlibaio.aにない場合、これらすべてのaio_x関数は実際にどこで定義されていますか?

4

6 に答える 6

11

libaioまた、aio パッケージが正しくインストールされ、-lrtフラグが存在しているにもかかわらず、リンクに問題がありました。

-lコマンド呼び出しの後でフラグを配置すると (最後など)、gccこの問題が解決される場合があることが判明しました。Stack Overflow でこのソリューションを見つけました

私はこれをやめました:

gcc -Wall -Werror -g -o myExe -lrt myExe.c

そして、これをやり始めました:

gcc -Wall -Werror -g -o myExe myExe.c -lrt
于 2014-12-15T14:10:24.507 に答える
8

編集:マニュアルページによると、 libaio.so はリンク先の正しいライブラリではありません:

man aio_read

あらすじ

   #include <aio.h>

   int aio_read(struct aiocb *aiocbp);

   Link with -lrt.

したがって、これとリンクする必要があります:

g++ -lrt aio.cc -o aio

ライブラリが gcc で動作する方法は次のとおりです。

-L は、-l で検索されるディレクトリのリストにディレクトリ dir を追加します。

-l はライブラリ自体を追加します。ファイルの名前が libsomename.so の場合は、「-lsomename」を使用するだけです

于 2009-08-01T23:24:22.990 に答える
0

わかりました、Evan Teran は正しいです。-lrt とリンクしたときに機能しました。aio_x 関数は、一般的な POSIX 拡張ライブラリで定義されているようです。

ありがとう、エヴァン。

于 2009-08-02T17:21:23.600 に答える
0

-Lは検索パスを指定し、 -lは実際のライブラリを指定しますか?

于 2009-08-01T23:20:52.483 に答える
0

試す:

sudo apt-get install libaio-dev

次に、必ず-laioリンク行で指定してください。

于 2009-08-01T23:26:16.543 に答える
0

-laiolibaio にリンクするために必要です。の引数は-o、コンパイルされた実行可能ファイルを呼び出すものです。

于 2009-08-01T23:26:40.023 に答える