静的リンクライブラリはLLVMの世界のなかにある。llvm-arとllvm-ranlibがそれを扱う。llvm-ldは動的リンクライブラリをリンクする(bitcodeで表現された静的リンクライブラリが見つからなかったら)。現代的なオペレーティングシステムにおいて、動的リンクライブラリが実行可能バイナリとほとんど同義であるとしたら、動的リンクライブラリはnative codeで表現されるだろう。
llvm-gcc -emit-llvm -Wall -O2 -g -c foo.c llvm-gcc -emit-llvm -Wall -O2 -g -c bar.c llvm-ld -link-as-library foo.o bar.o -o libfoobar.bc llc libfoobar.bc -f -o libfoobar.s gcc -Wall -O2 -g -c libfoobar.s libtool -dynamic libfoobar.o -o libfoobar.dylib
libtoolはldを呼び出す(もちろんlibtoolはGNU libtoolではない)。自明なオプションとアーキテクチャ関連のオプションは省略しよう。
ld -dylib -ldylib1.o libfoobar.dylib.o -o libfoobar.dylib
ldには既にフックがかけてある。解は単純だ。ldに-dylibオプションが与えられていたら、入力をnative codeに変換してからシステムのldを呼び出せばいい。
1 件のコメント:
libtoolは引数のファイルタイプを調べてからldを呼び出すので、libtoolにもフックが必要だ。
コメントを投稿