gcc错误未定义符号编译perix 5.22 on aix 7.1

时间:2015-09-20 11:09:43

标签: perl gcc aix

尝试使用gcc 4.2.0在AIX 7.1上编译perl 5.22.0。 gcc来自AIX 7.1附带的AIX工具箱。我需要建立一个perl来运送我们的产品,客户坚持这一点。

我使用了perl配置的以下设置,结果很不错

sh Configure -des -Dcc=gcc -Dprefix=/my/own/dir -Duserelocatableinc

然后我运行make,退出时出现以下错误:

gcc -maix32 -c -DPERL_CORE -D_ALL_SOURCE -D_ANSI_C_SOURCE -D_POSIX_SOURCE -DUSE_NATIVE_DLOPEN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGE_FILES -D_FORTIFY_SOURCE=2 -std=c89 -O -Wall -Werror=declaration-after-statement -Wextra -Wc++-compat -Wwrite-strings caretx.c
        gcc -maix32 -o miniperl -Wl,-brtl -Wl,-bdynamic -L/usr/local/lib -Wl,-b32 -Wl,-bmaxdata:0x80000000 perlmini.o opmini.o miniperlmain.o  gv.o toke.o perly.o pad.o regcomp.o dump.o util.o mg.o reentr.o mro_core.o keywords.o hv.o av.o run.o pp_hot.o sv.o pp.o scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o utf8.o taint.o deb.o universal.o globals.o perlio.o perlapi.o numeric.o mathoms.o locale.o pp_pack.o pp_sort.o caretx.o   -lpthread -lbind -lnsl -lgdbm -ldbm -ldl -lld -lm -lcrypt -lc
ld: 0711-317 ERROR: Undefined symbol: .__truncl128
ld: 0711-317 ERROR: Undefined symbol: .__copysignl128
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
collect2: ld returned 8 exit status
make: 1254-004 The error code from the last command is 1.

我在没有sh Configure开关的情况下运行-des,尽力给出合理的答案,但得到了相同的结果。

搜索truncl128和/或copysignl128几乎不会产生任何命中。看似天体物理学家patched gcc 4.5 because of that。我确实尝试自己编译gcc 4.5但是我需要安装太多东西(例如binutils,我也必须先编译)。一个更新的gcc的RPM二进制文件引导我进入依赖地狱。所以我坚持使用IBM的工具集。

在这个问题上,没有在Perl的README中找到关于其他配置/编译器选项的提示。我忽视了什么吗?

“128”似乎指向某些数学库中整数/数字的精度。我不需要那个。如果有一些“忘记超高精度”开关,那就没关系。

有没有人有解决编译错误的线索?如果可能,使用AIX的标准工具?

编辑:这是-Wl的输出,-bloadmap:loadmap.txt:

cat loadmap.txt
(ld): setopt 64
(ld): halt 4
(ld): setopt r/o->w
(ld): setopt nodelcsect
(ld): setopt rtl
(ld): setopt rtllib
(ld): setopt symbolic:1
(ld): setfflag 4
(ld): savename miniperl
(ld): filelist 52 1
(ld): i /lib/crt0_64.o
(ld): i /tmp//ccgIAPwm.o
(ld): setopt autoimp
(ld): i perlmini.o
(ld): i opmini.o
(ld): i miniperlmain.o
(ld): i gv.o
(ld): i toke.o
(ld): i perly.o
(ld): i pad.o
(ld): i regcomp.o
(ld): i dump.o
(ld): i util.o
(ld): i mg.o
(ld): i reentr.o
(ld): i mro_core.o
(ld): i keywords.o
(ld): i hv.o
(ld): i av.o
(ld): i run.o
(ld): i pp_hot.o
(ld): i sv.o
(ld): i pp.o
(ld): i scope.o
(ld): i pp_ctl.o
(ld): i pp_sys.o
(ld): i doop.o
(ld): i doio.o
(ld): i regexec.o
(ld): i utf8.o
(ld): i taint.o
(ld): i deb.o
(ld): i universal.o
(ld): i globals.o
(ld): i perlio.o
(ld): i perlapi.o
(ld): i numeric.o
(ld): i mathoms.o
(ld): i locale.o
(ld): i pp_pack.o
(ld): i pp_sort.o
(ld): i caretx.o
(ld): lib /usr/lib/libpthread.a
(ld): lib /usr/lib/libbind.a
(ld): lib /usr/lib/libnsl.a
(ld): lib /usr/lib/libdl.a
(ld): lib /usr/lib/libld.a
(ld): lib /usr/lib/libm.a
(ld): lib /usr/lib/libcrypt.a
(ld): lib /usr/lib/libc.a
(ld): i /opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.2.0/ppc64/libgcc.a
(ld): i /opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.2.0/ppc64/libgcc_eh.a
(ld): lib /usr/lib/librtl.a
LIBRARY: Shared object libpthread.a[shr_xpg5_64.o]: 342 symbols imported.
LIBRARY: Shared object libbind.a[shr_64.o]: 412 symbols imported.
LIBRARY: Shared object libnsl.a[shr_64.o]: 430 symbols imported.
LIBRARY: Shared object libdl.a[shr_64.o]: 4 symbols imported.
LIBRARY: Shared object libcrypt.a[shr_64.o]: 8 symbols imported.
LIBRARY: Shared object libc.a[shr_64.o]: 3075 symbols imported.
LIBRARY: Shared object libc.a[posix_aio_64.o]: 20 symbols imported.
LIBRARY: Shared object libc.a[aio_64.o]: 18 symbols imported.
LIBRARY: Shared object libc.a[pse_64.o]: 8 symbols imported.
LIBRARY: Shared object libc.a[dl_64.o]: 4 symbols imported.
LIBRARY: Shared object libc.a[pty_64.o]: 1 symbols imported.
LIBRARY: Shared object librtl.a[lazy42_64.o]: 3 symbols imported.
FILELIST: Number of previously inserted files processed: 52
(ld): initfini _GLOBAL__FI_miniperl _GLOBAL__FD_miniperl
(ld): resolve
RESOLVE: 3581 of 15669 symbols were kept.
(ld): addgl /usr/lib/glink64.o
ADDGL: Glink code added for 215 symbols.
(ld): er full
ld: 0711-318 ERROR: Undefined symbols were found.
        The following symbols are in error:
 Symbol                    Inpndx  TY CL Source-File(Object-File) OR Import-File{Shared-object}
                              RLD: Address  Section  Rld-type Referencing Symbol
 ----------------------------------------------------------------------------------------------
 .__truncl128              [4]     ER PR numeric.c(numeric.o)
                                   00000524 .text    R_RBR    [64]    .Perl_my_modfl
 .__copysignl128           [6]     ER PR numeric.c(numeric.o)
                                   00000564 .text    R_RBR    [64]    .Perl_my_modfl
ER: The return code is 8.

1 个答案:

答案 0 :(得分:1)

好的,这不是我的问题的答案,但我找到了一个解决方法,我没关系。

解决方法是使用perl 5.20.3 。由于这个版本编译,测试和安装都很好,仍然保持5.20,这似乎是一个可接受的解决方案。

在perl 5.22中,INSTALL文件显示为:

-Dusequadmath

我考虑过在perl.org上提交错误报告,因为我不会在配置和-Dcc=中使用{{1}}开关。但我(必须)使用gcc 4.2,所以我将不再这样做。

@ssigmond:你已经指出了正确的方向。如果你在这里写一个简短的答案,我会把它作为一个公认的答案,所以你将获得你应得的学分。谢谢你的努力!