2

以下のようなテストプログラムを書きました。

#include <sys/socket.h>
int main( void ) {
    int  sock = socket(AF_INET, SOCK_DGRAM, 0);
    return 0;
}

そしてそれをコンパイルしようとしました:

$ /tool/sunstudio/bin/cc test.c
Undefined                       first referenced
 symbol                             in file
socket                              test.o
ld: fatal: Symbol referencing errors. No output written to a.out

出力は「シンボルソケットが参照されていません」です。

これを解決できるように、私に方向性を教えてください。

4

3 に答える 3

6

これが質問です。

次のようなテストプログラムを書きました。

#include <sys/socket.h>
int main( void ) {
    int  sock = socket(AF_INET, SOCK_DGRAM, 0);
    return 0;
}

そして、それをコンパイルしようとしました(これは本当に役立つ出力です。最新のコンパイラは問題を解決するために最善を尽くしていることを覚えておく必要があります):

$ /tool/sunstudio/bin/cc test.c
Undefined                       first referenced
 symbol                             in file
socket                              test.o
ld: fatal: Symbol referencing errors. No output written to a.out

出力から、シンボルsocketが参照されていないことがわかります。したがって、入力man socketすると、マニュアルページから次のように表示されます。

SYNOPSIS
     cc [ flag ... ] file ... -lsocket  -lnsl  [ library ... ]

-lフラグは、この関数を使用するには、名前付きライブラリもリンクする必要があることを示します。この場合、次のよう-lsocket -lnslにコマンド ラインに追加するようにcc指示されます。

$ /tool/sunstudio/bin/cc test.c -lsocket -lnsl
于 2010-10-11T11:54:38.240 に答える
2

コマンドラインでソケットライブラリにリンクする必要があります:

-lsocket 
于 2010-10-11T11:45:49.900 に答える
2

少なくとも-lsocketリンクステップに追加する必要があります。つまり、libsocket.so に対するリンクです。ただし、SunStudio UI でそれを行う方法がわかりません。そのプロジェクトは makefile ベースですか?

man ページは通常、必要なライブラリを探すのに適した場所です。この場合、socket の man ページでも推奨され-lnslているため (概要を参照)、それも必要になる可能性がありますが、私はそれが必要だったことを覚えていません。

于 2010-10-11T11:46:26.607 に答える