используя инструмент ar в алхимии - PullRequest
1 голос
/ 12 апреля 2010

Я обнаружил, что если вы укажете путь к инструменту 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 в алхимии не работает, если вы попытаетесь сгенерировать библиотеку где-нибудь, кроме '.'.

Кто-нибудь еще видел это? Есть ли обходной путь?

Кстати, я также разместил этот вопрос в форме Алхимии .

Ответы [ 2 ]

1 голос
/ 02 сентября 2010

Кажется, есть ошибка в инструменте 'ar', но вот решение .

0 голосов
/ 12 апреля 2010

Да, я обнаружил, что это происходит со мной тоже. Мое решение состояло в том, чтобы просто создать библиотеки в текущем каталоге и просто перенести их в соответствующий каталог после его создания. Что касается причины, я не знаю.

...