linux的clone()函数会导致奇怪的编译错误,为什么?

问题描述 投票:0回答:1

我有一个简短的程序,如下所示,我尝试了解

clone
功能的实际工作原理。

#include<stdio.h>
#include<sched.h>
#include<unistd.h>
#include<sys/types.h>

extern int errno;

int f(void*arg)
{
    pid_t pid=getpid();
    printf("child pid=%d\n",pid);
}
char buf[1024];
int main()
{
    int ret=clone(f,buf,CLONE_VM|CLONE_VFORK,NULL);
    if(ret==-1){
        printf("%d\n",errno);
        return 1;
    }
    printf("father pid=%d\n",getpid());
    return 0;
}

g++4.1.2 编译它并说:

$ g++ testClone.cpp
/usr/bin/ld: errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference in /tmp/ccihZbuv.o
/lib64/libc.so.6: could not read symbols: Bad value
collect2: ld returned 1 exit status

我也尝试过

g++ testClone.cpp -lpthread

也无法编译。为什么?

linux gcc compilation clone
1个回答
2
投票

这与

clone
无关,您对
errno
的声明是不正确的。请使用
#include <errno.h>
来代替。

© www.soinside.com 2019 - 2024. All rights reserved.