2017-08-14 9 views
2

ターゲットのx86 Linuxディストリビューションは非常に限られているので、私は標準ライブラリを使用していません。標準ライブラリ(libc)なしでコンソール(Linux)にプリントする方法

#include <unistd.h> 

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

私はコンソールにテキストを印刷したいと思いますが、他のやり方はありません。文句を言わない仕事上の のコードは、それが標準ライブラリに依存しているため gccの

+0

、あなたの質問に含まれるコードで作業していませんか? – payne

+0

libcが必要なので動作しません。 – nGs2225

+1

'libc'は必要ありません。 'write()'のためのシステムコールの実装が必要です。標準ライブラリを使用できない場合は、必要なシステムコールを含む独自のライブラリを作成し、そのライブラリにリンクする必要があります。しかし、それは努力のように感じる。これをやりたいですか? –

答えて

2

-nostdlib Test.cppの-oテストあなたは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; 
} 
関連する問題