Pthreads和undefined reference
Pthreads和undefined reference
我正在接触C语言中的pthread库,为了熟悉这个库,我写了一些虚拟代码。但是当我尝试编译这段代码时,我得到了一个对pthread_create的未定义引用,尽管我已经包含了正确的库并且传递给函数的参数数量是正确的。请你帮帮我好吗?
我的代码是:
#include#include #include #include #include #include #include #include void *dummy_thread(void *arg) { pthread_exit(NULL); } void *dummy_fork(void *arg) { exit(0); } void pthread_perror(char *string, int errcode) { char errmsg[256]; strerror_r(errcode, errmsg, 256); printf("%s:%s\n", string, errmsg); } int main(int argc, char** argv) { pthread_t *threads; int rc, nt, *pids; long threads_microsecs, fork_microsecs, t; struct timeval ora, dopo; float perc; if (argc != 2) { printf("Numero di argomenti %d non valido.\n", argc); exit(1); } nt = strtol(argv[1], NULL, 10); if (nt < 0) { printf("Numero di thread non valido: %d", nt); exit(1); } threads = (pthread_t *) malloc (nt * sizeof(pthread_t)); pids = (int *) malloc (nt * sizeof(int)); if (pids == NULL) { perror("malloc"); exit(1); } gettimeofday(&ora, NULL); for (t = 0; t < nt; t++) { if (rc = pthread_create(&threads[t], NULL, dummy_thread, NULL)) { pthread_perror("pthread_create", rc); exit(1); } gettimeofday(&dopo, NULL); threads_microsecs = dopo.tv_usec - ora.tv_usec; threads_microsecs += 1000000 * (dopo.tv_sec - ora.tv_sec); printf("Tempo per la creazione dei thread %ld nsec.\n", threads_microsecs); gettimeofday(&ora, NULL); for (t = 0; t < nt; t++) { if ((pids[t] = fork()) < 0) { perror("fork"); exit(1); } if (pids[t] == 0) { dummy_fork(NULL); } } gettimeofday(&dopo, NULL); fork_microsecs = dopo.tv_usec - ora.tv_usec; fork_microsecs += 1000000 * (dopo.tv_sec - ora.tv_sec); printf("Tempo per la creazione dei processi %ld nsec", fork_microsecs); perc = 100 * (((float) fork_microsecs - threads_microsecs)/(float)fork_microsecs); printf("(%.2f%%)\n", perc); } return (EXIT_SUCCESS); }
在Eclipse中,我们需要将“pthread”添加到GCC C链接器库中。具体操作步骤如下:
1. 打开Eclipse并进入项目。
2. 点击“项目”菜单,选择“属性”。
3. 在弹出的对话框中,选择“C/C++构建”选项。
4. 在左侧的选项列表中,选择“设置”。
5. 在右侧的选项卡中,选择“工具设置”。
6. 展开“GCC链接器”选项,并选择“库”。
7. 在“库”下的“库 (-l)”选项中,点击“添加”按钮。
8. 在弹出的对话框中,输入“pthread”并点击“确定”。
9. 完成以上步骤后,重新编译项目。
这样操作后,项目将会正确引用pthread库,并能够正常编译。
可能出现的问题是,当我们在使用pthread库时,编译器提示“undefined reference”错误。这通常是由于未正确引用pthread库导致的。
解决这个问题的方法就是按照上述步骤,在Eclipse中将pthread库添加到GCC C链接器库中。这样,编译器就能够正确找到并链接pthread库,从而解决了“undefined reference”错误。
希望这篇文章能够对遇到类似问题的开发者有所帮助。
在使用Pthreads编程时,有时会出现"undefined reference"的问题。这个问题是由于编译时缺少-pthread选项导致的。为了解决这个问题,我们可以在编译时加上-pthread选项。
具体的解决方法如下所示:
gcc -Wall -Wextra -o prog prog.c -pthread
上面的命令将编译prog.c文件并生成可执行文件prog。在编译时,我们使用了-pthread选项来链接Pthreads库。这样就能够解决"undefined reference"的问题。
通过上述命令,编译器将会正确链接Pthreads库,并且在编译过程中不会出现任何错误。这样,我们就能够顺利地编译和运行使用Pthreads的程序了。
总结起来,解决Pthreads和"undefined reference"问题的方法就是在编译时加上-pthread选项。这样能够正确链接Pthreads库,从而解决"undefined reference"的问题。希望这篇文章对你有所帮助!