【问题标题】:clone system call OS X not linking - undefined symbols [duplicate]克隆系统调用OS X未链接-未定义的符号[重复]
【发布时间】:2013-12-22 21:48:27
【问题描述】:

我想在 OS X 上使用clone 系统调用。这是一个 Unix 系统调用,所以应该没有问题,对吧?我已成功尝试使用forkvfork 和其他类似功能。这是我正在尝试的程序:

#include <sched.h>  //Clone resides here
#include <stdlib.h> //standard library
#include <stdio.h>
#include <time.h>
#include <limits.h>
#include <sys/shm.h>
#include <errno.h>
#include <sys/sem.h>
#include <signal.h>
#include <sys/types.h>

int helloWorld();

int main(int argc, char *argv[])
{
    int (*functionPointer)() = &helloWorld; //The first argument of clone accepts a pointer to a function which must return int
    void **childStack = (void**)malloc(1024); //We will give our child 1kB of stack space

    clone(functionPointer, childStack, 0, NULL); //First arugment is the function to be called, second one is our stack, CLONE_VM means to share memory, last NULL PID description

    return 0;
}

int helloWorld()
{
    printf("Hello (clone) world!\r\n");

    return 0;
}

使用gcc -o test my_file.c 编译得到:

Undefined symbols for architecture x86_64:
  "_clone", referenced from:
      _main in ccG3qOjx.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

请随意忽略 cmets,因为我只是在学习。还有一件事..如果我尝试在参数中传递CLONE_VM 它甚至不会编译给我错误:

my_file.c: In function ‘main’:
my_file.c:12: error: ‘CLONE_VM’ undeclared (first use in this function)
my_file.c:12: error: (Each undeclared identifier is reported only once
my_file.c:12: error: for each function it appears in.)

我错过了#include 吗?如果有,是哪一个?

我做错了什么以及如何解决?

【问题讨论】:

标签: c gcc fork clone ld


【解决方案1】:

clone 是特定于 Linux 的,因此对于 OS X,您只能使用 fork,或者如果可以管理的话,可以使用线程。

【讨论】:

    猜你喜欢
    • 2016-12-20
    • 2013-10-19
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    相关资源
    最近更新 更多