2

mrubyについて聞いたことがきっかけで、C プログラミングを学び始めました。オンラインでいくつかのチュートリアルに取り組んだので、基本は理解できましたが、サンプル アプリケーションをコンパイルして mruby を試してみたいと思います。単一の C ファイルをコンパイルする方法は理解していますが、自分のコードと一緒に mruby もコンパイルする方法を理解しようとしています。

Mac OS X 10.8 で GCC を使用しています。

この例を使用すると:

#include <stdlib.h>
#include <stdio.h>

#include <mruby.h>
#include <mruby/compile.h>

int main(void)
{
  mrb_state *mrb = mrb_open();
  char code[] = "p 'hello world!'";
  printf("Executing Ruby code from C!\n");

  mrb_load_string(mrb, code);
  return 0;
}

そして、次のコマンドを実行します。

gcc example.c

私は明らかにエラーが発生します:

engine.c:4:19: error: mruby.h: No such file or directory

git リポジトリのクローンを作成し、インクルード ディレクトリへのシンボリック リンクを作成しましたが、間違っていると確信しています。

すべてが一緒にコンパイルされるように、コードに mruby を含めるにはどうすればよいですか?

更新:これが私が持っているディレクトリ構造です。mruby インクルード ディレクトリへのシンボリック リンクに注意してください。

$ tree -l .
.
├── example.c
└── include
    └── mruby -> ../../mruby/include
        ├── mrbconf.h
        ├── mruby
        │   ├── array.h
        │   ├── class.h
        │   ├── compile.h
        │   ├── data.h
        │   ├── debug.h
        │   ├── dump.h
        │   ├── gc.h
        │   ├── hash.h
        │   ├── irep.h
        │   ├── khash.h
        │   ├── numeric.h
        │   ├── proc.h
        │   ├── range.h
        │   ├── string.h
        │   ├── value.h
        │   └── variable.h
        └── mruby.h

ディレクトリを含めてコンパイルすると:

gcc example.c -I include/mruby

次のエラーが表示されます。

Undefined symbols for architecture x86_64:
  "_mrb_load_string", referenced from:
      _main in ccd8XYkm.o
  "_mrb_open", referenced from:
      _main in ccd8XYkm.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

更新:ファイルの指示に従いましたmruby/INSTALL(基本的には、mruby プロジェクトのルート ディレクトリで make を実行するように指示されています)。mruby/build/hostこれにより、ファイルを含む一連のディレクトリとフィールドがディレクトリに追加されましたlib/libmruby.a。コンパイル時にこのファイルを含めることで、サンプル スクリプトをコンパイルできました。

gcc -Iinclude/mruby example.c ../mruby/build/host/lib/libmruby.a

今、私は自分のアプリを実行します:

$ ./a.out
Executing Ruby code from C!
"hello world!"
4

1 に答える 1