GNATLINK在新的Ubuntu版本下失败



我安装了一个新版本的ubuntu(12.10,从12.04升级),现在我无法链接。即使对于一个简单的" hello_world.adb"程序,这也是如此:

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没有合作:我认为这与GNAT自己的命令行构造有关。我自己尝试了各种构造。

有人知道如何解决此问题吗?


新信息:我创建了一个运行Ubuntu 12.04的Oracle" Virtual Box",安装了最新的" Libre" GNAT GPL,并且似乎可以正常工作。显然,问题与Ubuntu 12.10版本有关。我在物理机和VM上同时运行12.10:两者都会导致GNAT GPL失败。fwiw

我将考虑关闭这个问题。感谢大家的想法和建议!

新的,新信息:我忽略了设置路径变量,以便通往gnat二进制的路径在字符串的末尾。显然这是我链接的原因。当我接受GNAT GPL的建议将二进制路径放在字符串开始时,链接停止工作!screw!有任何想法,有人吗?

检查文件 - permissions&文件路径。*NIX具有一个非常脆弱的许可系统,有时事情可以根据实际目录与符合目录的目录作用。

或只是迁移到Windows,我总共遇到了文件 - 验证的问题...并且它在 *NIX子系统(Cygwin,iirc)上。

我正在与Debian一起运行Debian,似乎是一个64位GNAT GPL2012。我可以通过使用-largs -Wl,-v标志来告诉我gnatmake告诉我哪个命令行发送到系统链接器:

$ 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(查找安装了安装的特定文件的包装包)建议您也许只需要包libclibc-dev

每当我遇到这个问题时,它通常是"多lib问题"的表现,debian和现在的ubuntu都在移动他们的库,以便您可以可以构建例如同一台计算机上的32位和64位可执行文件(或Windows或Arduino!)...

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

上找到crt1.o
/usr/lib/x86_64-linux-gnu/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脚本中提出图书馆路径的方法...

谢谢大家。我尝试了以上所有建议,并尝试了GPS的所有组合,以前使用的Ubuntu版本以及硬机器和虚拟机没有成功。

我现在正在成功地使用管道追求(非常)有限的Windows POSIX(WPOSIX)版本,因为这就是WPOSIX产品中实现的所有内容。我想使用共享内存和消息传递。

我遇到了相同的问题,我能发现的唯一解决方案是按照命令作为超级用户运行:

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

最新更新