2012-11-08 59 views
1

我安装了新版本的Ubuntu(12.10,从12.04升级),现在我无法链接。即使对于一个简单的“Hello_World.adb”计划是正确的:在新的Ubuntu版本下gnatlink失败

gnatlink hello_world 
/usr/gnat/libexec/gcc/i686-pc-linux-gnu/4.5.4/ld: crt1.o: No such file: No such file or directory 
collect2: ld returned 1 exit status 
gnatlink: error when calling /usr/gnat/bin/gcc 

我已经看到了一些在各种论坛“修复”的,但他们似乎不蚊蚋的工作:我想这有用gnat自己的命令行构建。我尝试过各种构造,但无济于事。

有谁知道如何解决这个问题?


最新资讯:我创建了一个甲骨文“虚框”运行Ubuntu 12.04,安装了最新的“自由报” GNAT GPL,它似乎工作得很好。显然,这个问题与Ubuntu 12.10版本有关。我在物理机器和虚拟机上都运行12.10:两者都导致GNAT GPL失败。 fwiw

我会认为这个问题关闭。感谢大家的意见和建议!

新增新信息:我忽略了设置PATH变量,因此GNAT二进制文件的路径位于字符串的末尾。显然,这是我允许链接的。当我将GNAT GPL的建议放在字符串开头的二进制路径时,链接停止工作!疯了!任何想法,任何人?

+0

我使用的x86 Linux的最新自由报gnatgpl。 32位。 –

+0

'gnatmake'作品;我不知道这是否能解决您的问题。 –

+0

谢谢,基思,但gnatmake失败,同样的错误消息+额外的消息'gnatmake:***链接失败。' –

回答

1

检查文件权限&文件路径。 * nix有一个非常脆弱的权限系统,有时它的工作依赖于实际的目录和符号链接的目录。

或者只是迁移到Windows,我总共有一个文件权限问题......并且它在* nix子系统(cygwin,IIRC)上。

+0

感谢您的建议Shark8。如果出现权限问题,我将自己设置为超级用户,但问题仍然存在。我宁愿在Windows上,但我需要使用Posix,而Windows上的Florist非常不完整,上次我查了一下。我会尝试在Windows上的虚拟机中安装早期版本。 –

1

我运行Debian用,现在看来,64位GNAT GPL 2012年我能得到gnatmake告诉我什么命令行使用-largs -Wl,-v标志发送到系统链接:

$ gnatmake -f hello.adb -largs -Wl,-v 
gcc -c hello.adb 
gnatbind -x hello.ali 
gnatlink hello.ali -Wl,-v 
collect2 version 4.5.4 20120510 for GNAT GPL 2012 (20120509) (x86-64 Linux/ELF) 
/opt/gnat-gpl-2012/bin/../libexec/gcc/x86_64-pc-linux-gnu/4.5.4/ld --eh-frame-hdr -m 
elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o hello 
/usr/lib/../lib64/crt1.o /usr/lib/../lib64/crti.o 
/opt/gnat-gpl-2012/bin/../lib/gcc/x86_64-pc-linux-gnu/4.5.4/crtbegin.o 
-L./ -L/opt/gnat-gpl-2012/lib/gcc/x86_64-pc-linux-gnu/4.5.4/adalib/ 
-L/opt/gnat-gpl-2012/bin/../lib/gcc/x86_64-pc-linux-gnu/4.5.4 
-L/opt/gnat-gpl-2012/bin/../lib/gcc 
-L/opt/gnat-gpl-2012/bin/../lib/gcc/x86_64-pc-linux-gnu/4.5.4/../../../../lib64 
-L/lib/../lib64 -L/usr/lib/../lib64 
-L/opt/gnat-gpl-2012/bin/../lib/gcc/x86_64-pc-linux-gnu/4.5.4/../../.. 
b~hello.o ./hello.o -v /opt/gnat-gpl-2012/lib/gcc/x86_64-pc-linux-gnu/4.5.4/adalib/libgnat.a 
-lgcc -lgcc_eh -lc -lgcc -lgcc_eh /opt/gnat-gpl-2012/bin/../lib/gcc/x86_64-pc-linux-gnu/4.5.4/crtend.o 
/usr/lib/../lib64/crtn.o 
GNU ld (GNU Binutils) 2.20 

它显示它正在从/ usr/lib64(YMMV)获取crt1.o(和其他)。

我想知道您是否需要(重新)安装Ubuntu C编译器? (我认为这是sudo apt-get build-essentials)。

另一方面,使用dpkg --search(查找哪个安装的软件包安装了特定文件)表明,您可能只需要打包libc或者libc-dev

1

每当我遇到这个问题时,它通常都是Debian新版本的“多lib问题”的表现,现在Ubuntu正在移动他们的库,以便您可以构建32位和64位可执行文件(或跨为Windows编译或Arduino的!)在同一台机器上...

所以我的机器上,我可以在

/usr/lib/x86_64-linux-gnu/crt1.o 

找到crt1.o和如果我发出命令行

export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu 

在运行Gnatmake之前,它解决了这个问题。 因为它是连接器(LD)失败了,你可能会想尝试

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu 

如果LIBRARY_PATH不起作用

如果是这样的话,还有其他的方法来解决问题, 喜欢的方式在你的.bashrc脚本中找出库路径...

+0

应该提到,如果你在32位机器上,你的LIBRARY_PATH设置将会不同。你需要找到crt1.0在你的Ubuntu 12.10安装中的位置 –

0

谢谢大家。我已经尝试了所有上述建议,并尝试过每种GPS的组合,以前的Ubuntu版本,以及硬盘和虚拟机都没有成功。

我现在正在使用管道成功地追求一个(非常)有限的Windows Posix(wposix)版本,因为这是wposix产品中实现的一切。我想使用共享内存和消息。

0

我遇到了同样的问题,我能找到的唯一解决办法是超级用户身份运行以下命令:

ln -s /usr/lib/x86_64-linux-gnu /usr/lib64