Pthreads和undefined reference

7 浏览
0 Comments

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);
}

0
0 Comments

在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”错误。

希望这篇文章能够对遇到类似问题的开发者有所帮助。

0
0 Comments

在使用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"的问题。希望这篇文章对你有所帮助!

0