我安装了新版本的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“虚拟盒子”,安装了最新的“libre”GNAT GPL,它似乎运行得很好。显然,这个问题与Ubuntu 12.10版本有关。我在物理机和VM上运行12.10:两者都导致GNAT GPL失败。 FWIW
新的,新的信息:我忽略了设置PATH变量,因此GNAT二进制文件的路径位于字符串的末尾。 Apparentlhy这是允许我链接的内容。当我采用GNAT GPL的建议将二进制路径放在字符串的开头时,链接停止工作!疯了!任何想法,任何人?
答案 0 :(得分:1)
检查文件权限&文件的路径。 * nix有一个非常脆弱的权限系统,有时候工作依赖于实际目录和符号链接目录。
或者只是迁移到Windows,我在文件权限方面总共遇到了一个问题......它位于* nix子系统(cygwin,IIRC)上。
答案 1 :(得分:1)
我正在使用64位GNAT GPL 2012运行Debian。我可以通过使用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
。
答案 2 :(得分:1)
每当我遇到这个问题时,它通常都是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脚本中改变库路径的方法......
答案 3 :(得分:0)
谢谢大家。我已经尝试了上述所有建议,并尝试过各种GPS组合,以前使用过的Ubuntu版本,以及硬盘和虚拟机没有成功。
我现在使用管道成功地追求(非常)有限的Windows Posix(wposix)版本,因为这就是wposix产品中实现的所有内容。我想使用共享内存和消息传递。
答案 4 :(得分:0)
我遇到了同样的问题,我能找到的唯一解决方案是以超级用户身份运行以下命令:
ln -s /usr/lib/x86_64-linux-gnu /usr/lib64