clone system call OS X not linking - undefined symbols [duplicate]

妖精的绣舞 提交于 2019-12-11 04:36:43

问题


I would like to use the clone system call on OS X. It's a Unix system call so it shouldn't be a problem, right? I have successfully tried using fork, vfork and other similar functions. Here is the program I'm trying:

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

Compiling with gcc -o test my_file.c gives:

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

Feel free to ignore the comments, since I'm just learning. And one more thing.. if I try to pass CLONE_VM in the arguments it doesn't even compile giving me the error:

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.)

Am I missing an #include? If so, which one?

What am I doing wrong and how to fix it?


回答1:


clone is specific to Linux, so for OS X you're stuck with fork, or use threads if you can manage with that.



来源:https://stackoverflow.com/questions/20734373/clone-system-call-os-x-not-linking-undefined-symbols

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!