2010-04-12 26 views
1

我發現如果你指定一個到'012'工具的路徑,它不會創建鏈接庫所需的'l.bc'文件。在鍊金術中使用'ar'工具

例如,這裏是當我不指定路徑(它的工作)的情況下:

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上發佈了這個問題。

回答

0

是的,我發現這也發生在我身上。我的解決方案是在當前目錄中創建庫,並在創建之後將其移動到合適的目錄。至於爲什麼,我不知道。

+0

我想這是目前唯一的解決方法。我能夠在我的項目的CMake腳本中解決問題,並使其在二進制輸出目錄中創建庫而不是它的某個子目錄。 – paleozogt 2010-04-12 21:03:48