Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有标准库(libc)的情况下打印到控制台(Linux)_C_Linux_Gcc - Fatal编程技术网

如何在没有标准库(libc)的情况下打印到控制台(Linux)

如何在没有标准库(libc)的情况下打印到控制台(Linux),c,linux,gcc,C,Linux,Gcc,我没有使用标准库,因为我的目标x86Linux发行版非常有限 #include <unistd.h> void _start () { const char msg[] = "Hello world"; write( STDOUT_FILENO, msg, sizeof( msg ) - 1 ); } #包括 void_start(){ const char msg[]=“你好,世界”; 写入(STDOUT_文件号,msg,sizeof(msg)-1);

我没有使用标准库,因为我的目标x86Linux发行版非常有限

#include <unistd.h>

void _start () {
      const char msg[] = "Hello world";
      write( STDOUT_FILENO, msg, sizeof( msg ) - 1 );
}
#包括
void_start(){
const char msg[]=“你好,世界”;
写入(STDOUT_文件号,msg,sizeof(msg)-1);
}
我想将文本打印到控制台,但我不能,还有其他方法吗。 上面的代码不起作用,因为它依赖于标准库
gcc Test.cpp-o Test-nostlib

如果没有libc,则需要从头开始编写一个
write()
系统调用来写入标准输出

有关详细信息,请参阅此资源:

上面链接中的代码示例:

void* syscall5(
    void* number,
    void* arg1,
    void* arg2,
    void* arg3,
    void* arg4,
    void* arg5
);

typedef unsigned long int uintptr; /* size_t */
typedef long int intptr; /* ssize_t */

static
intptr write(int fd, void const* data, uintptr nbytes)
{
    return (intptr)
        syscall5(
            (void*)1, /* SYS_write */
            (void*)(intptr)fd,
            (void*)data,
            (void*)nbytes,
            0, /* ignored */
            0  /* ignored */
        );
}

int main(int argc, char* argv[]) 
{
    write(1, "hello\n", 6);
    return 0;
}

问题中包含的代码中有什么不起作用?它不起作用,因为它需要libc。它不需要
libc
;它需要实现
write()
的系统调用。如果无法使用标准库,则必须创建自己的库,其中包含所需的系统调用,并与之链接。不过,这感觉像是一项艰苦的工作。你确定要这样做吗?