1

我安装了新版本的 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“虚拟机”,安装了最新的“自由”GNAT GPL,它似乎工作得很好。显然,这个问题与 Ubuntu 12.10 版本有关。我在物理机和虚拟机上都运行了 12.10:两者都会导致 GNAT GPL 失败。关注

我会认为这个问题已经结束。感谢大家的想法和建议!

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

4

5 回答 5

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

这表明它正在crt1.o从 /usr/lib64 (YMMV) 获取(和其他)。

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

另一方面,使用dpkg --search(查找安装了特定文件的已安装包)表明您可能只需要 packagelibclibc-dev.

于 2012-11-10T18:22:01.880 回答
1

检查文件权限和文件路径。*nix 有一个非常脆弱的权限系统,有时事情的工作取决于实际目录与符号链接目录。

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

于 2012-11-09T16:25:02.300 回答
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 脚本中修改库路径的方法......

于 2012-11-12T17:28:44.533 回答
0

谢谢大家。我已经尝试了上述所有建议,并尝试了 GPS、以前工作的 Ubuntu 版本以及硬机和虚拟机的所有组合,但均未成功。

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

于 2012-12-10T17:19:10.087 回答
0

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

ln -s /usr/lib/x86_64-linux-gnu /usr/lib64
于 2013-09-10T12:02:24.750 回答