0

これをダウンロードして使用する必要があるプロジェクトに取り組んでいます。ダウンロードしたフォルダー内で展開すると、次の 3 つのものが表示されます。

  1. 「include」というフォルダ
  2. 「src」というフォルダ
  3. 「Makefile」というファイル

いくつかの調査の後、これらのファイルを含むディレクトリに移動し、コマンドを入力するだけでよいことがわかりましたmake

私のシステムにライブラリをインストールしたようです。そこで、ライブラリを使用するサンプル コードを試しました。

csp_conn_t * conn;
csp_packet_t * packet;
csp_socket_t * socket = csp_socket(0);
csp_bind(socket, PORT_4);
csp_listen(socket, MAX_CONNS_IN_Q);

while(1) {
    conn = csp_accept(socket, TIMEOUT_MAX);
    packet = csp_read(conn, TIMEOUT_NONE);
    printf(“%S\r\n”, packet->data);
    csp_buffer_free(packet);
    csp_close(conn);
}

コードのサンプル サーバー側に指定されているのはこれだけです。だから私はこれらを一番上に追加することにしました:

#include <csp.h>
#include <csp_buffer.h>
#include <csp_config.h>
#include <csp_endian.h>
#include <csp_interface.h>
#include <csp_platorm.h>

正しい軌道に乗っていると思って、gcc でコードをコンパイルしようとしましたが、次のエラーが発生しました。

csptest_server.c:1: fatal error: csp.h: No such file or directory
compilation terminated.

結局、ライブラリを正しくインストールできなかったのではないかと思いましたが、念のため、このコマンドを実行して次の結果を得ることで確認できることがわかりました。

find /usr -iname csp.h
/usr/src/linux-headers-2.6.35-28-generic/include/config/snd/sb16/csp.h
/usr/src/linux-headers-2.6.35-22-generic/include/config/snd/sb16/csp.h

csp.h がインストールされているようですが、ヘッダーのインクルード行で間違って参照している可能性がありますか? 洞察はありますか?どうもありがとう。

4

2 に答える 2

2

makeコマンドはおそらくライブラリをビルドするだけで、インストールはしません。あなたは試すことができsudo make installます。これは「一般的な」方法ですが、ライブラリのドキュメントがある場合はそれを確認することをお勧めします。

このsudoコマンドが必要になるのは、システムのインクルードディレクトリとライブラリディレクトリを書き込む権限がない場合のみです。

(ライブラリをインストールする代わりに)別の可能性は、GCCにライブラリのソースコードと生成されたバイナリの場所を(gccコマンドの-Iおよび-Lオプションを使用して)伝えることです。

于 2012-08-15T13:56:39.697 に答える
2

この Makefile は何もインストールせず、ソースをバイナリ形式に変換するだけです。

csp.hLinux カーネルの はプロジェクトとは何の関係もありません。これは単なる名前の衝突であり、3 文字の名前で発生する可能性があります。

あなたの場合、インクルードディレクトリをサーバーのコンパイルフラグに追加する必要があると思いますgcc -I/path/to/csp/include/csp csptest_server.c.

-L/path/to/csp -lcsp(次に、リンカーがリンク先のバイナリ コードを見つけられるように指定する必要があるため、リンカー エラーが発生します。)

于 2012-08-15T13:59:34.840 に答える