オフィスアワーがそろそろ始まるよ!()

E08系 (Linker)

E08000

コマンドラインオプション --forbid-library で使用を禁止したライブラリを リンクしようとしています。ビルド関連の設定を見直してください。

次の (人工的な) 例では、プログラムは C 標準ライブラリ libc 内の printf 関数を使用しています。ユーザは --library c オプションで libc を リンクしようとしていますが、同時に --forbid-library c オプションで libc の使用を禁止してしまっています。

$ zen run src/main.zen --library c --forbid-library c
src/main.zen:4:9: エラー[E08000]: 禁止されたライブラリ「printf」をリンクしようとしています。
    _ = printf("hello\n");
        ~
--中略--
$ zen run src/main.zen --library c
hello
$

E08001

ダイナミックライブラリを利用するためには、プログラムが位置独立コード (PIE: Position-Independent Executable) である必要があります。 ビルド関連の設定を再確認してください。

関連するコマンドラインオプションには、以下のものがあります。

  -fPIC       位置独立コード (PIC) を有効にする
  -fno-PIC      位置独立コード (PIC) を無効にする

E08002

C 標準ライブラリ libc 内にある関数等を、libc をリンクしないまま使おうと しています。 libc をリンクするためには、コマンドラインで --library c オプションを指定するか、ビルドスクリプト内で exe.linkSystemLibrary("c") を 指定してください (ここで exe は、Builder の addExecutable 等で作られる exe ステップを指します)。

次のプログラムは、libc 内の関数 printf を使用しています。

pub extern "c" fn printf(format: [*:0]u8, ...) c_int;

pub fn main() anyerror!void {
    _ = printf("hello\n");
}

このプログラムは libc をリンクしないと動作しません。

$ zen run src/main.zen
src/main.zen:4:9: エラー[E08002]: Cライブラリへの依存はビルドコマンドで明示的に指定しなければなりません。
    _ = printf("hello\n");
~
--中略--
$ zen run src/main.zen --library c
hello
$

Chapter 1

Chapter 2

Chapter 3

Chapter 4

Chapter 5

Chapter 6

Chapter 7

Chapter 8

Chapter 9

Chapter 10

Chapter 11

Chapter 12

Chapter 13

Chapter 14

Chapter 15

Appendix

Error Explanation

☰ 人の生きた証は永遠に残るよう ☰
Copyright © 2018-2020 connectFree Corporation. All rights reserved. | 特定商取引法に基づく表示
Zen, the Zen three-circles logo and The Zen Programming Language are trademarks of connectFree corporation in Japan and other countries.