2016-09-03 7 views
2

/とCでのpthreadのlibを使用する:このように* */</p> <p>私Cmakefile.txtファイルが編集cmakeの

cmake_minimum_required(VERSION 3.3) 
project(WebServer) 

set(CMAKE_C_COMPILER "/usr/bin/gcc") 

set(SOURCE_FILES io.c server.c lock_fcntl.c sig_handler.c thread_job.c  msg_parser.c) 
set(LIB http-parser-master/http_parser.c) 

set(CMAKE_USE_PTHREADS_INIT true) 
set(CMAKE_USE_PTHREADS_INIT ON) 

find_package(Threads REQUIRED) 

add_executable(server ${SOURCE_FILES} ${LIB}) 

target_link_libraries(server Threads::Threads) 

add_executable(client client.c io.c) 
include_directories(header) 
include_directories(http-parser-master) 

を、私は私のコードをコンパイルしてリンクすることができます。しかし、pthread_createは動作していないようです。

server.c:

void create_thread(int socket) { 

data_t *data; 
data = malloc(sizeof(data_t)); 
if (data == NULL) { 
    fprintf(stderr, "error in memory allocation"); 
    exit(EXIT_FAILURE); 
} 

data->sock = socket; 

/* debug */ 
fprintf(stdout, "[*] Creating thread\n"); 
fflush(stdout); 

if (pthread_create(data->tid, NULL, job_t, data) != 0) { 
    fprintf(stderr, "Error returned by pthread_create()\n"); 
    exit(EXIT_FAILURE); 
} 

/* debug */ 
fprintf(stdout, "[*] Thread created\n"); 
fflush(stdout); 

} 

thread_job.c:

void *job_t(void *arg) { 

data_t *data = arg; 

char *http_msg_h; 
int nread; 

/* debug */ 
fprintf(stdout, "start listening\n"); 
fflush(stdout); 

/* read http header from connsd socket and store it in msg buffer */ 
nread = receive_msg_h(data->sock, (void **) &http_msg_h); 

/* debug */ 
fprintf(stdout, "[+] parsing completed"); 
fflush(stdout); 

} 

どちらもないスレッドの作成 "出力に印刷されて「もがリスニングを開始" を関数が返さないかのようにそれがあります。しかし、それは動作しません。

+1

リンカーエラーは発生しませんか? - >プログラムが正常にリンクされました。あなたの問題は、CMakeではなくあなたのコードに関連する可能性が非常に高いです。 - >私たちにあなたのコードを教えてください。 –

+0

'make cleanを実行します。 make VERBOSE = 1'を実行し、最後に実行しているリンカーコマンドを表示します。 –

+0

cmakeList.txtファイルを変更しました。今私はリンクすることができますが、pthread_createは動作しません...(私は質問を更新しました) –

答えて

0

CMakeLists.txtが正しい。私のエラーがコードにあった。 私は を変更210 をpthread_create(&data->tid, NULL, job_t, data) != 0に設定します。

+0

問題が解決したら、**あなたの答え(緑色のダニ)を受け入れてください。 – ollo

関連する問題