gpt4 book ai didi

c - OS X 上的 undefined symbol "_clone"

转载 作者:太空宇宙 更新时间:2023-11-04 04:11:39 24 4
gpt4 key购买 nike

代码:

#include <stdio.h>
#include <sched.h>
#include <stdlib.h>
#include <sys/wait.h>

#define _GNU_SOURCE

void *stack_memory()
{
const int stackSize = 65536;
void* stack = (void*)malloc(stackSize);
if (stack == NULL) {
printf("%s\n", "Cannot allocate memory \n");
exit(EXIT_FAILURE);
}
return stack;
}

int jail(void *args)
{
printf("Hello !! - child \n");
return EXIT_SUCCESS;
}

int main()
{
printf("%s\n", "Hello, world! - parent");
clone(jail, stack_memory(), SIGCHLD, 0);
return EXIT_SUCCESS;
}

错误:

Undefined symbols for architecture x86_64: "_clone", referenced from: _main in docker-4f3ae8.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

最佳答案

Linux 不会在符号前加上前缀 _,所以您不是在使用 Linux。

但是根据its man pageclone(2) 系统调用是特定于 Linux 的.

clone() is Linux-specific and should not be used in programs intended to be portable.


可能您正在使用 OS X 或其他软件。而且您正在编译为 C,因此调用未声明的函数不是编译时错误(只是一个大警告)。这就是为什么它是链接器错误而不是编译时错误(并且您忽略了编译器警告。)

顺便说一句,#define _GNU_SOURCE包含头文件之后是没有意义的。您必须在 包括 header 之前定义功能请求宏,以便在尚未默认设置的情况下让它们为 GNU-only 函数定义原型(prototype)。

关于c - OS X 上的 undefined symbol "_clone",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56607062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com