On 2/28/19 9:46 AM, Tom Hughes wrote:
On 28/02/2019 08:30, Zdenek Dohnal wrote:
> I tried to manually run configure script for Vim, with ruby support
> enabled, but it always failed with error message about missing ncurses
> (ncurses-devel was installed though). When I looked into config.log,
> I saw:
>
> configure:12069: gcc -o conftest -g -O2 -L. -Wl,-z,relro -Wl,-z,now
> -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -fstack-protector
> -rdynamic -Wl,-export-dynamic -L/usr/local/lib conftest.c -lselinux
> -lncurses >&5
> conftest.c: In function 'main':
> conftest.c:67:26: warning: implicit declaration of function 'tgetent'
> [-Wimplicit-function-declaration]
> char s[10000]; int res = tgetent(s, "thisterminaldoesnotexist");
> ^~~~~~~
> /usr/bin/ld: /tmp/ccivPtT5.o: relocation R_X86_64_32 against
> `.rodata.str1.1' can not be used when making a PIE object; recompile
> with -fPIC
> /usr/bin/ld: final link failed: nonrepresentable section on output
> collect2: error: ld returned 1 exit status
>
> Adding -fPIC actually solved it, but why does the script want it in the
> first place? Then I ran configure without ruby support enabled and it
> passed... again from config.log I found out that script wants ruby's
> LDFLAGS, because script needs them for compilation of ruby support and
> Ruby LDFLAGS are:
You don't need -fPIC but you need -fPIE at least.
The simple rule is that if you're going to link with Fedora's
linker flags (which you are doing here) then you need to compile
with Fedora's compiler flags,
That was it :) - configure script was using
LDFLAGS embedded in ruby,
but it did not use CFLAGS. Thank you for the hint!
which would have included -fPIE if
you didn't already specify -fPIE or -fPIC on the command line.
So make sure you tell configure to use $RPM_OPT_FLAGS when
compiling - if you use %configure and the configure script is
not too silly then that should happen automatically.
There is a reasonable argument here that the pkgconfig file
that our ruby package installs is broken, because it embeds
our linker flags without embedding our compiler flags.
So "pkg-config --libs ruby" tells you to link with those
flags but "pkg-config --cflags ruby" doesn't give you matching
compiler flags.
That said, the ruby.pc file may be assuming that it will be
used for building ruby extensions, which would be .so files
and hence use -fPIC anyway...
Tom
--
Zdenek Dohnal
Associate Software Engineer
Red Hat Czech - Brno TPB-C