-1

クライアントサーバーコード client.cpp と server.cpp の両方に main() があります。サーバーは最初に実行する必要があり、中断がなくなるまで存続する必要があります。

server.cpp には、私が作成した 2 つの cpp ファイルが含まれています。

#include "serverFunction.cpp"
#include "serverFunction2.cpp"

この両方にも含まれていますserverFunction.h

このためのmakefileの書き方は?pthread を使用したので、最後に -lpthread を使用しました。個別に、私はこの方法でコンパイルします:

g++ -o a LinServer.cpp -lpthread

私はこれで試しました:

all: LinServer LinClient

LinServer:
    g++ -o a LinServer.cpp -pthread

LinClient:
    g++ -o b LinClient.cpp -pthread

しかし、次のエラーが発生します。

LinServer.o: In function `main':
LinServer.cpp:(.text+0x6dd): undefined reference to `pthread_create'
LinServer.cpp:(.text+0x6e9): undefined reference to `pthread_detach'
LinServer.o: In function `__static_initialization_and_destruction_0(int, int)':
LinServer.cpp:(.text+0xb3e): undefined reference to `std::ios_base::Init::Init()'
LinServer.cpp:(.text+0xb55): undefined reference to `std::ios_base::Init::~Init()'
LinServer.o:(.eh_frame+0x7b): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status
make: *** [LinServer] Error 1
4

1 に答える 1

1

ライブラリの指定が間違っています:

g++ -o a LinServer.cpp -pthread

であってはなり-lpthreadません-pthread(-lオプションは、ライブラリを使用してコンパイルすることを意味します)。

あなたの問題は 2 つの main() 関数を持つこととは関係ありませんが、答えは - はい、同じ Makefile で main() 関数を使用して 2 つのファイルをコンパイルできますが、ファイルが異なる出力ファイル (異なるバイナリ) に属している場合に限ります。

エラー メッセージは、リンカーの設定または標準 C++ ライブラリの構成に問題があるように見えます (リンカーはそれを認識できないようです)。

于 2013-06-25T05:04:58.720 に答える