Alchemyの「ar」ツールへのパスを指定すると、ライブラリをリンクするために必要な「l.bc」ファイルが作成されないことがわかりました。
たとえば、パスを指定しない場合(機能します)は次のとおりです。
asimmons-mac:test asimmons$ echo 'int main() { return 42; }' > testmain.cpp
asimmons-mac:test asimmons$ echo 'int test1() { return -1; }' > test1.cpp
asimmons-mac:test asimmons$ echo 'int test2() { return 1; }' > test2.cpp
asimmons-mac:test asimmons$ g++ -c testmain.cpp
asimmons-mac:test asimmons$ g++ -c test1.cpp
asimmons-mac:test asimmons$ g++ -c test2.cpp
asimmons-mac:test asimmons$ ar cr libtest.a test1.o test2.o
asimmons-mac:test asimmons$ g++ testmain.cpp libtest.a
llvm-ld, "-o=".(98237.achacks.o = "98237.achacks.exe"), -disable-opt -internalize-public-api-list=_start,malloc,free,__adddi3,__anddi3,__ashldi3,__ashrdi3,__cmpdi2,__divdi3,__fixdfdi,__fixsfdi,__fixunsdfdi,__fixunssfdi,__floatdidf,__floatdisf,__floatunsdidf,__iordi3,__lshldi3,__lshrdi3,__moddi3,__muldi3,__negdi2,__one_cmpldi2,__qdivrem,__adddi3,__anddi3,__ashldi3,__ashrdi3,__cmpdi2,__divdi3,__qdivrem,__fixdfdi,__fixsfdi,__fixunsdfdi,__fixunssfdi,__floatdidf,__floatdisf,__floatunsdidf,__iordi3,__lshldi3,__lshrdi3,__moddi3,__muldi3,__negdi2,__one_cmpldi2,__subdi3,__ucmpdi2,__udivdi3,__umoddi3,__xordi3,__subdi3,__ucmpdi2,__udivdi3,__umoddi3,__xordi3,__error /Users/asimmons/Development/alchemy-darwin-v0.5a/avm2-libc/lib/avm2-libc.l.bc /Users/asimmons/Development/alchemy-darwin-v0.5a/avm2-libc/lib/avm2-libstdc++.l.bc, test.l.bc 98237.achacks.o
98237.achacks.swf, 5593510 bytes written
asimmons-mac:test asimmons$ ls -l
total 10992
-rwxr-xr-x 1 asimmons staff 5593575 Apr 9 17:44 a.exe
-rw------- 1 asimmons staff 1284 Apr 9 17:43 libtest.a
-rw-r--r-- 1 asimmons staff 672 Apr 9 17:43 test.l.bc
-rw-r--r-- 1 asimmons staff 27 Apr 9 17:43 test1.cpp
-rwxr-xr-x 1 asimmons staff 536 Apr 9 17:43 test1.o
-rw-r--r-- 1 asimmons staff 26 Apr 9 17:43 test2.cpp
-rwxr-xr-x 1 asimmons staff 536 Apr 9 17:43 test2.o
-rw-r--r-- 1 asimmons staff 26 Apr 9 17:43 testmain.cpp
-rwxr-xr-x 1 asimmons staff 552 Apr 9 17:43 testmain.o
asimmons-mac:test asimmons$
そして、これは私がパスを指定する例です(それは機能しません)。'ar'にライブラリを'lib'の下に置き、lib/libtest.aにリンクするように指示しようとしています。
asimmons-mac:test asimmons$ mkdir lib
asimmons-mac:test asimmons$ echo 'int main() { return 42; }' > testmain.cpp
asimmons-mac:test asimmons$ echo 'int test1() { return -1; }' > test1.cpp
asimmons-mac:test asimmons$ echo 'int test2() { return 1; }' > test2.cpp
asimmons-mac:test asimmons$ g++ -c testmain.cpp
asimmons-mac:test asimmons$ g++ -c test1.cpp
asimmons-mac:test asimmons$ g++ -c test2.cpp
asimmons-mac:test asimmons$ ar cr lib/libtest.a test1.o test2.o
asimmons-mac:test asimmons$ g++ testmain.cpp lib/libtest.a
llvm-ld, "-o=".(98638.achacks.o = "98638.achacks.exe"), -disable-opt -internalize-public-api-list=_start,malloc,free,__adddi3,__anddi3,__ashldi3,__ashrdi3,__cmpdi2,__divdi3,__fixdfdi,__fixsfdi,__fixunsdfdi,__fixunssfdi,__floatdidf,__floatdisf,__floatunsdidf,__iordi3,__lshldi3,__lshrdi3,__moddi3,__muldi3,__negdi2,__one_cmpldi2,__qdivrem,__adddi3,__anddi3,__ashldi3,__ashrdi3,__cmpdi2,__divdi3,__qdivrem,__fixdfdi,__fixsfdi,__fixunsdfdi,__fixunssfdi,__floatdidf,__floatdisf,__floatunsdidf,__iordi3,__lshldi3,__lshrdi3,__moddi3,__muldi3,__negdi2,__one_cmpldi2,__subdi3,__ucmpdi2,__udivdi3,__umoddi3,__xordi3,__subdi3,__ucmpdi2,__udivdi3,__umoddi3,__xordi3,__error /Users/asimmons/Development/alchemy-darwin-v0.5a/avm2-libc/lib/avm2-libc.l.bc /Users/asimmons/Development/alchemy-darwin-v0.5a/avm2-libc/lib/avm2-libstdc++.l.bc, lib/test.l.bc 98638.achacks.o
llvm-ld: error: Cannot find linker input 'lib/test.l.bc'
asimmons-mac:test asimmons$ ls -l
total 56
-rw-r--r-- 1 asimmons staff 552 Apr 9 17:46 98638.achacks.o
drwxr-xr-x 3 asimmons staff 102 Apr 9 17:46 lib
-rw-r--r-- 1 asimmons staff 27 Apr 9 17:45 test1.cpp
-rwxr-xr-x 1 asimmons staff 536 Apr 9 17:46 test1.o
-rw-r--r-- 1 asimmons staff 26 Apr 9 17:45 test2.cpp
-rwxr-xr-x 1 asimmons staff 536 Apr 9 17:46 test2.o
-rw-r--r-- 1 asimmons staff 26 Apr 9 17:45 testmain.cpp
-rwxr-xr-x 1 asimmons staff 552 Apr 9 17:45 testmain.o
asimmons-mac:test asimmons$ ls -l lib/
total 8
-rw------- 1 asimmons staff 1284 Apr 9 17:46 libtest.a
asimmons-mac:test asimmons$
ただし、lib / test.l.bcが見つからないため、リンカはエラーになります。最初の例では、'test.l.bc'がlibtest.aと一緒に生成されたことに注意してください。しかし、2番目の例では、test.l.bcは生成されませんでした。どこに行ったの?
これは不自然な例ですが、私が錬金術で構築しようとしているプロジェクトでは、makeスクリプトがフルパスでライブラリを生成し、その方法でそれらを参照します。'。'以外の場所でライブラリを生成しようとすると、錬金術の'ar'ツールが壊れているようです。
他の誰かがこれを見たことがありますか?回避策はありますか?
fyi、私はこの質問をAlchemyformusにも投稿しました。