1

我发现如果您指定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 一起生成的。但是在第二个例子中 test.l.bc 没有生成。它去哪儿了?

这是一个人为的示例,但在我尝试使用炼金术构建的项目中,make 脚本会以完整路径生成库,然后以这种方式引用它们。如果您尝试在除“.”之外的任何位置生成库,那么炼金术的“ar”工具似乎已损坏。

有没有其他人看过这个?有解决方法吗?

仅供参考,我也在炼金术形式上发布了这个问题。

4

2 回答 2

1

'ar' 工具中似乎有一个错误,但这是解决方法

于 2010-09-01T23:26:21.013 回答
0

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

于 2010-04-12T16:30:52.970 回答