0

ここからライブラリをダウンロードしました。プログラムにヘッダー ファイルを追加しましたが、このヘッダー ファイルの関数にアクセスしようとすると、次のエラーが発生します。

undefined reference to the function for u_open() and u_accept(). .cこのヘッダー ファイルのファイルをコンパイルしようとしましたが、次のエラーが発生します。

undefined reference to main.

この問題を解決するために私の知識のすべてを試しましたが、解決できませんでした。これがプログラムです。

#include "uici.h"
int main()
{
char client[50];
char buf[1024];

u_port_t portnumber;
portnumber=48625;

int fd = u_open(portnumber);

int communFd = u_accept(fd,client,50);

perror("Opened");

fprintf(stderr,"\nComun fd is %d\n\n\n",communFd);

read(communFd,buf,1024);

write(STDOUT_FILENO,buf,1024);

fprintf(stderr,"\n\nReading complete\n");
return 0;
}

この問題を解決するにはどうすればよいですか?

よろしく

4

3 に答える 3

1

ヘッダー ファイルは、 (および) でuici.h呼び出している関数を宣言しますが、ソース ファイルにあるそれらの実装は宣言しません。リンカーがプログラム全体を作成しようとすると、実装が見つからないというエラーが表示されます。main()u_open()u_accept()

解決策は、実際のプログラム バイナリを作成するときにすべてのファイルをリンクすることです。g++ フロントエンドを使用する場合、コマンド ラインですべてのソース ファイルを一緒に指定することでこれを行うことができます。例えば:

g++ -o main main.c uici.c

必要な実装が にあると仮定して、「main」というメイン プログラムを作成しますuici.c

edit : のビルド済みライブラリに対してリンクしている場合はuici、リンクにライブラリが必要であることをフロントエンドに指定する必要があります。たとえば、次のように指定します。

g++ -o main main.c -luici
于 2013-01-28T08:02:39.930 に答える
0

gcc でのコンパイル中にこれらのフラグのいずれかを使用します

-I <searchpath to include files>
-L <searchpath to the lib file>
-l<thelibname>

元:

  gcc -o myprogram -lfoo -L/home/me/foo/lib myprogram.c

これにより、myprogram がフォルダー /home/me/foo/lib 内のスタティック ライブラリ libfoo.a にリンクされます。

于 2013-01-28T07:53:51.693 に答える
0

次のように gcc を使用する場合は、ライブラリをリンクする必要があります。

gcc nameofprgram.c -l<library>

于 2013-01-28T07:51:02.057 に答える