我安装了一个新版本的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
我在不同的论坛上见过许多“修复”,但它们似乎不适用于蚊虫:我认为这与蚊虫自己的命令行构造有关。我尝试过各种构造,但都没有用。
有人知道如何解决这个问题吗?
新信息:我创建了一个运行Ubuntu12.04的Oracle“虚拟盒”,安装了最新的"libre“GNAT,它看起来工作得很好。显然,这个问题与Ubuntu12.10版本有关。我在物理机器和VM上都运行了12.10 :两者都导致GNAT GPL失败。fwiw
我会认为这个问题已经结束。感谢大家的意见和建议!
新信息:我忽略了设置PATH变量,这样到GNAT二进制文件的路径就在字符串的末尾。显然这就是让我链接的原因。当我接受GNAT GPL的建议将二进制路径放在字符串的开头时,链接就停止工作了!怪怪的!有什么主意吗有人吗?
发布于 2012-11-09 08:25:02
检查文件-权限和文件路径。*nix有一个非常脆弱的权限系统,有时它依赖于实际目录和符号链接目录。
或者只是迁移到Windows,我遇到了一个文件权限的问题.它在一个*nix子系统(cygwin,IIRC)上。
发布于 2012-11-10 10:22:01
我运行Debian,似乎,64位小虫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 64 (YMMV)中获取crt1.o
(和其他文件)。
我想知道您是否需要(重新)安装Ubuntu编译器?(我认为是sudo apt-get build-essentials
)。
另一方面,使用dpkg --search
(查找安装了特定文件的包)意味着您可能只需要包libc
,或者libc-dev
。
发布于 2012-11-12 09:28:44
每当我遇到这个问题时,它通常都是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脚本中篡改库路径的方法.
https://stackoverflow.com/questions/13298113
复制相似问题