Solarisの下でのSun Studio 10のリンクエラー
-
29-09-2019 - |
質問
私はこのようなテストプログラムを書きました:
#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 -lnsl
に cc
次のようにコマンドライン:
$ /tool/sunstudio/bin/cc test.c -lsocket -lnsl
他のヒント
ソケットライブラリのコマンドラインにリンクする必要があります。
-lsocket
少なくとも追加する必要があります -lsocket
リンクステップに、つまりlibsocket.soに対してリンクをリンクします。 Sunstudio UIでそれを行う方法がわかりませんが、そのプロジェクトはファイルに基づいていますか?
Manページは通常、必要なライブラリを探すのに適した場所です。この場合 ソケット用のマンページ またお勧めします -lnsl
(あらすじを参照)それが必要かもしれないが、私はそれが必要であることを覚えていない。
所属していません StackOverflow