2012-01-24 33 views
3

私はWindowsでminGWを使って、C++プログラムをコンパイルしようとしています。私はそこにソケットを使用していますので、私はリンクしようとしています(winsock.hを含むwsock32ライブラリは含まれていません)。私は、-Lスイッチがリンク用であることを知っていますが、以下のコマンドは動作しません。g ++でwsock32ライブラリをリンクするには?

g++ C:\program.cpp -Lwsock32.lib 
g++ C:\program.cpp -LC:\windows\system32\wsock32.dll 
g++ C:\program.cpp -lC:\windows\system32\wsock32.dll 
g++ C:\program.cpp -LC:\windows\system32\wsock32.lib 

私は何をすべきですか?

答えて

5

-Lオプションは、リンカーがライブラリ/ dllを探すディレクトリを設定するためのオプションです。

-lオプションは、リンクするライブラリ/ dllの名前を付けるためのオプションです。

g++ C:\Program.cpp -LC:\Windows\System32 -lwsock32 

はあなたの通常のWindowsのコマンドプロンプトからプログラムをコンパイルするためのコマンドでなければなりません意味します

あなたのコンパイラがsystem32で自動的に見えるかもしれないと思うので、-Lオプションをスキップしてみてください。

+2

ちなみに、おそらく-lws2_32 – Joshua

+0

ありがとう!実際には、両方とも動作します(ws2_32&wsock32) – jzeus

+0

私が実際に-Lスイッチを使用しても、動作しません!代わりに、私は百万の奇妙なエラーに直面しています! – jzeus

4

@Joshuaがコメントしたように、おそらくws2_32.dllが必要です。

GNUコンパイラコレクションは、Visual Studio LIBファイルではなく、ranlib archives(Aファイル)を使用します。

w32headersプロジェクトは、ws2_32.dllを含む、ほとんどの標準Windows DLL用にgcc - およびg++互換のヘッダーとアーカイブを提供します。アーカイブの名前は通常、DLLの名前に.dllという拡張子を除いたもので、接頭辞はlibで、接尾辞は.aです(* nixアーカイブの命名規則に従います)。したがって、ws2_32.dllのシンボルはlibws2_32.aにあり、これは‑lws2_32を使用してリンクすることができます。

デフォルトでは、w32headersのアーカイブはGNU ldライブラリパスに含まれているため、標準のWindows DLLとリンクできるようにするには、‑Lオプション付きのライブラリディレクトリを追加する必要はありません。あなたのケースでは、あなたが必要とする唯一のオプションは‑lws2_32です:

 
g++ C:\Program.cpp -lws2_32 

は、出力は現在のディレクトリにa.exeされることをコンパイルと仮定すると、成功のリンク。出力バイナリの名前は、‑oオプションで上書きできます。

注:私の答えには改行なしのハイフンを使用しました。 &をコピーしてコマンドラインオプションを貼り付ける場合は、すべてのハイフン文字を通常のハイフンに置き換えてください。

+0

はい、そうでした!ありがとう... – jzeus

+0

実際に-Lオプションを追加すると、全く動作しません;) – jzeus

+0

@DarrenSadr、なぜ改行なしのハイフンを使用しますか? – Pacerier

関連する問題