質問

私はこのようなテストプログラムを書きました:

#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

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

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

役に立ちましたか?

解決

これが質問です。

私はこのようなテストプログラムを書きました:

#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 Manページから以下を入手できます。

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

-l フラグは、この関数を使用するには、指定されたライブラリもリンクする必要があることを示しています。この場合、追加するように言われています -lsocket -lnslcc 次のようにコマンドライン:

$ /tool/sunstudio/bin/cc test.c -lsocket -lnsl

他のヒント

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

-lsocket 

少なくとも追加する必要があります -lsocket リンクステップに、つまりlibsocket.soに対してリンクをリンクします。 Sunstudio UIでそれを行う方法がわかりませんが、そのプロジェクトはファイルに基づいていますか?

Manページは通常、必要なライブラリを探すのに適した場所です。この場合 ソケット用のマンページ またお勧めします -lnsl (あらすじを参照)それが必要かもしれないが、私はそれが必要であることを覚えていない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top