0

私はc++コードの下でubuntuで働いています。サーバーに接続するためにgsoapを使用しています。必要なすべてのデータを取得しました。サーバーへの接続にも成功しました。それでも質問があります。コマンドラインに書き込む必要があるのはなぜですか:g ++ test_server.cpp -o testServlibgsoap++。a。フォルダにすべての依存関係を含めたのに、コマンドラインにlibgsoap ++。aを含める必要があるのはなぜですか?編集:

コマンドラインにlibgsoap++。aを含めない場合、次のようになります。

undefined reference to `soap_embed'
/tmp/ccyeN0df.o: In function `soap_serialize_string(soap*, char* const*)':
TEST.cpp:(.text+0xb9de): undefined reference to `soap_reference'
/tmp/ccyeN0df.o: In function `soap_out_string(soap*, char const*, int, char* const*, char const*)':
TEST.cpp:(.text+0xba15): undefined reference to `soap_outstring'
/tmp/ccyeN0df.o: In function `soap_in_string(soap*, char const*, char**, char const*)':
4

1 に答える 1

1

-lgsoap++を使用してlibgsoap++に対してリンクすることをg++に通知する必要があります。

システム全体ではないバージョンのlibgsopa++に対してリンクする場合は、-Lフラグを介してg++へのライブラリパスを指定する必要があります。

簡単な説明:

リンク時エラーがあります。コンパイルは成功し、オブジェクトファイルが生成されました。soap_serialize_stringコンパイル時に、他の場所に存在することを(gsoapインクルードファイルを含めることで)「約束」し、オブジェクトコードを利用できるようにします。

ここで、リンカはそのオブジェクトファイルから実行可能ファイルを作成しようとします。オブジェクトファイル内のすべての「約束」をチェックし、それを解決しようとします。実際の関数を呼び出すことで置き換えます。この「実際の機能」はどこにあるのでしょうか?あなたの場合、それはlibgsoap++。aです。

したがって、リンカーにlibgsoap ++。aに対してリンクするように指示しない場合、promiseはpromiseのままであり、未定義の参照があります。

于 2011-09-07T12:51:10.540 に答える