コマンドラインオプション --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
$
ダイナミックライブラリを利用するためには、プログラムが位置独立コード (PIE: Position-Independent Executable) である必要があります。 ビルド関連の設定を再確認してください。
関連するコマンドラインオプションには、以下のものがあります。
-fPIC 位置独立コード (PIC) を有効にする
-fno-PIC 位置独立コード (PIC) を無効にする
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
$
☰ 人の生きた証は永遠に残るよう ☰
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.