File: link.md

package info (click to toggle)
nghttp2 1.68.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 15,592 kB
  • sloc: ansic: 104,233; cpp: 55,792; ruby: 30,108; yacc: 7,083; sh: 4,643; makefile: 1,506; python: 806
file content (85 lines) | stat: -rw-r--r-- 2,500 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<!-- summary: About Linking with `libmruby` -->

# Linking `libmruby` to your application

You have two ways to link `libmruby` to your application.

- using executable gem.
- using normal compilation process

## Executable Gems

If your application is relatively small, `mrbgem` is an easier way to
create the executable. By tradition, the gem name start with
`mruby-bin-`, e.g. `mruby-bin-debugger`.

### `mrbgem.rake` file

The executable name is specified in `mrbgem.rake` file at the top of
your `mrbgem` directory.

```ruby
MRuby::Gem::Specification.new('mruby-bin-example') do |spec|
  spec.license = 'MIT'
  spec.author  = 'mruby developers'
  spec.summary = 'Example for executable command gem'
  spec.bins = %w(mruby-example)    # <- this is binary name
end
```

### Source tree structure

The source file for the gem executable should be in
`<gem-name>/tools/<bin-name>`. Currently, we support C or C++ source code
(`.c`, `.cpp`, `.cxx`, `.cc`) for the executable. Ruby source files are not
supported. Put the functionality in the different gem and specify dependency to
it in `mrbgem.rake`.

## Normal compilation process

The `libmruby` is a normal library so that you can just link it to your
application. Specify proper compiler options (`-I` etc.) and linker options
(`-lmruby` etc.) to compile and link your application. Specify those options in
your build script (e.g. `Makefile`).

### Compiler options

You need to specify compiler options that are compatible to mruby configuration,
for example:

- `-I` to specify the place for mruby header files
- `-D` to specify mruby configuration macros

To retrieve compiler options used to build `mruby`, you can use `mruby-config`
command with following options:

- `--cc` compiler name
- `--cflags` options passed to compiler

```console
$ mruby-config --cflags
-std=gnu99 -g -O3 -Wall -DMRB_GC_FIXED_ARENA -I/home/matz/work/mruby/include -I/home/matz/work/mruby/build/host/include
```

### Linker options

Just like compiler options, you need to specify linker options that are
compatible to mruby configuration.

To retrieve linker options, you can use `mruby-config` with following options:

- `--ld` linker name
- `--ldflags` options passed to linker
- `--ldflags-before-libs` options passed to linker before linked libraries
- `--libs` linked libraries

```console
$ mruby-config --ldflags
-L/home/matz/work/mruby/build/host/lib

$ mruby-config --ldflags-before-libs
# <nothing in this case>

$ mruby-config --libs
-lmruby -lm
```