9

ZeroMQAPIを使用して組み込みの例hwserver.cをコンパイルできませんでした。私は可能な限りの方法を試しました。

gcc -lzmq hwserver.c -o hwserver

それは私に次のように促します:

 hwclient.c:(.text+0x22): undefined reference to `zmq_ctx_new'
 hwclient.c:(.text+0x3a): undefined reference to `zmq_socket'
 hwclient.c:(.text+0x52): undefined reference to `zmq_connect'
 hwclient.c:(.text+0x94): undefined reference to `zmq_send'
 hwclient.c:(.text+0xb8): undefined reference to `zmq_recv'
 hwclient.c:(.text+0xe4): undefined reference to `zmq_close'
 hwclient.c:(.text+0xf0): undefined reference to `zmq_ctx_destroy'
 collect2: error: ld returned 1 exit status

私はubuntu-12.10でzeromq-3.2.2を使用しています

どんな助けでも本当にありがたいです。

ありがとう、

-サム

4

2 に答える 2

29

引数の順序は非常にgcc重要です。

試す

 gcc -Wall -g hwserver.c -lzmq -o hwserver

最初に警告と最適化またはデバッグフラグ(たとえば-Wall、すべての警告、-gデバッグ情報)、次にオプションのプリプロセッサフ​​ラグ(-Dまたは-Iそれらがない場合)、ソースファイル、最後にライブラリ-lzmq(順序は関連:高レベルのライブラリから低レベルのライブラリまで)および出力オプション-o hwserver(他の場所にある可能性があります)。

gccドキュメント、特にGCCの呼び出しに関する章を読んでください。

忘れないでください-Wall:あなたは本当にすべての警告を受け取りたいので、警告が出なくなるまでコードを改善する必要があります。-Wextraさらに追加の警告を受け取りたい場合もあります。

デバッグ情報フラグを忘れないでください。プログラムをデバッグするには、デバッガーを-g使用する必要があります。gdb

後で、-Oまたは-O2を使用してバイナリプログラムを最適化します(コンパイラは、より効率的ですが、デバッグ可能性の低いマシンコードを生成します)。プログラムがデバッグされている場合にのみ、これに注意してください。

実際のサイズのCプログラム(つまり、いくつかのソースファイルといくつかのヘッダーファイルで構成されるプロジェクト)を開発する場合は、GNU make(非常に一般的なビルダー。試してみることができます)のようなビルダーインフラストラクチャが必要になります。代わりにomake )。

関連する質問に対するこの回答も参照してください。

于 2013-03-09T14:55:00.587 に答える
0

再試行

gcc hwserver.c -o hwserver -lzmq

パラメータの順序が正しくありません。

于 2013-12-23T06:04:23.247 に答える