在Alchemy中使用'ar'工具

时间:2010-04-12 15:24:59

标签: flash alchemy

我发现如果你指定Alchemy's'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一起生成。但在第二个例子中,没有生成test.l.bc。它去了哪里?

这是一个人为的例子,但是在项目中我试图用炼金术来构建make脚本在完整路径中生成库然后以这种方式引用它们。如果你试图在“。”之外的任何地方生成一个库,那么炼金术的'ar'工具似乎就被打破了。

有没有人见过这个?有解决方法吗?

fyi,我也在Alchemy formus上发布了这个问题。

2 个答案:

答案 0 :(得分:1)

'ar'工具中似乎有一个错误,但是here's the workaround

答案 1 :(得分:0)

是的,我发现这也发生在我身上。我的解决方案是在当前目录中创建库,并在创建后将其放到适当的目录中。至于原因,我不知道。