链接使用gnat构建的库的问题

时间:2018-01-18 00:22:13

标签: linker shared-libraries ada gnat

当尝试构建一些测试用例(只是用Ada编写的程序)时,我收到以下错误:

gcc -c -shared decimaltests.adb
gnatbind -x decimaltests.ali
gnatlink decimaltests.ali -lGenerics -lNumerics -lTesting
/usr/bin/ld: decimaltests: hidden symbol `_Unwind_Resume' in 
/usr/lib/gcc/x86_64-pc-linux-gnu/7.2.1/libgcc_eh.a(unwind-dw2.o) is referenced by DSO
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
gnatlink: error when calling /usr/bin/gcc
gnatmake: *** link failed.

我正在使用gnatmake -shared *.ad{b,s} -largs -lGenerics -lNumerics -lTesting构建它们显然这不是构建源代码的问题,而是为了进一步确认,我将源代码复制到此目录并使用构建的gnatmake -shared *.ad{b,s}构建测试很好。

构建依赖库并将其安装到gnat搜索的路径中。它似乎不是没有找到那些的问题。不确定这里发生了什么。

所有库都使用gnatmake -O2 -fPIC -shared *.ad{b,s}以及任何相关的库依赖项构建。依赖于这些的所有库仍然可以构建。它只是依赖于引发此错误的库的程序,并且始终存在相同的错误。

更新:使用gprbuild构建库,然后使用gprinstall安装它们似乎工作原理相似,但现在错误如下:

decimaltests.o: In function `_ada_decimaltests':
decimaltests.adb:(.text+0x43): undefined reference to `testing__start'
decimaltests.adb:(.text+0x4a): undefined reference to 
`generics__testing__default_tolerance'
decimaltests.adb:(.text+0x9e): undefined reference to 
`generics__testing__default_tolerance'
decimaltests.adb:(.text+0x108): undefined reference to 
`generics__testing__default_tolerance'
decimaltests.adb:(.text+0x172): undefined reference to 
`generics__testing__default_tolerance'
decimaltests.adb:(.text+0x1dc): undefined reference to 
`generics__testing__default_tolerance'
decimaltests.o:decimaltests.adb:(.text+0x23f): more undefined references to 
`generics__testing__default_tolerance' follow
decimaltests.o: In function `_ada_decimaltests':
decimaltests.adb:(.text+0x14f5): undefined reference to `testing__stop'
/usr/lib/numerics//libNumerics.so: undefined reference to 
`generics__testing__not_started@SYMS'
/usr/lib/numerics//libNumerics.so: undefined reference to 
`generics__testing__pass@SYMS'
/usr/lib/numerics//libNumerics.so: undefined reference to 
`generics__testing__fail@SYMS'
collect2: error: ld returned 1 exit status
gprbuild: link of decimaltests.adb failed

所以我查看了符号表中的两种构建方法,并注意到,在这两种情况下,符号绝对存在,但对它的引用似乎是错误的位置。我会尝试在不同的平台/编译器上构建,如果出现任何相关内容,我会再次更新。

1 个答案:

答案 0 :(得分:0)

两个进程都正确地构建了库和测试程序,并且测试程序在不同平台上正常运行。为了进一步确认这是一个错误,我安装了一个不同的GCC工具链并在原始平台下重复构建,并且没有出现这个问题。我将提交一份错误报告。