2017-08-14 45 views
2

我没有使用标准库,因为我的目标x86 Linux发行版非常有限。如何在没有标准库的情况下打印到控制台(Linux)(libc)

#include <unistd.h> 

void _start() { 
     const char msg[] = "Hello world"; 
     write(STDOUT_FILENO, msg, sizeof(msg) - 1); 
} 

我想打印文本到控制台,但我不能,是否有任何其他方式来做到这一点。 上述不会工作的代码,因为它依赖于标准库 的gcc -o Test.cpp的测试-nostdlib

+0

有什么理由不与你在你的问题包含代码的工作? – payne

+0

它不会工作,因为它需要libc。 – nGs2225

+1

它不需要'libc';它需要执行'write()'的系统调用。如果你不能使用标准库,你必须创建你自己的,包含你需要的系统调用,然后链接它。不过,这感觉像是艰苦的工作。你确定你要这么做吗? –

回答

2

如果你没有的libc,那么你需要手艺从头write()系统调用写入标准输出。从上面的链接http://weeb.ddns.net/0/programming/c_without_standard_library_linux.txt

代码示例:

详情请参见本资源

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; 
} 
相关问题