/と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);
}
どちらもないスレッドの作成 "出力に印刷されて「もがリスニングを開始" を関数が返さないかのようにそれがあります。しかし、それは動作しません。
リンカーエラーは発生しませんか? - >プログラムが正常にリンクされました。あなたの問題は、CMakeではなくあなたのコードに関連する可能性が非常に高いです。 - >私たちにあなたのコードを教えてください。 –
'make cleanを実行します。 make VERBOSE = 1'を実行し、最後に実行しているリンカーコマンドを表示します。 –
cmakeList.txtファイルを変更しました。今私はリンクすることができますが、pthread_createは動作しません...(私は質問を更新しました) –