コマンドラインオプション --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.