lang/lua: /usr/bin/ld: lapi.o: relocation R_X86_64_32 against `luaO_nilobject_' can not be used when making a shared object; recompile with -fPIC

Rainer Hurling rhurlin at gwdg.de
Thu Dec 29 14:06:06 UTC 2011


On 29.12.2011 13:59 (UTC+1), O. Hartmann wrote:
> Am 12/29/11 13:34, schrieb Daniel Kalchev:
>>
>>
>> On 29.12.11 14:19, O. Hartmann wrote:
>>> Am 12/29/11 12:59, schrieb Kostik Belousov:
>>>> On Thu, Dec 29, 2011 at 12:19:40PM +0100, O. Hartmann wrote:
>>>>> [...]
>>>>> /usr/bin/ld: lapi.o: relocation R_X86_64_32 against `luaO_nilobject_'
>>>>> can not be used when making a shared object; recompile with -fPIC
>>>>> lapi.o: could not read symbols: Bad value
>>>>> clang: error: linker command failed with exit code 1 (use -v to see
>>>>> invocation)
>>>>> *** Error code 1
>>>>>
>>>>> Stop in /usr/ports/lang/lua/work/lua-5.1.4/src.
>>>>> *** Error code 1
>>>>>
>>>>> Stop in /usr/ports/lang/lua/work/lua-5.1.4/src.
>>>>> *** Error code 1
>>>>>
>>>>> Stop in /usr/ports/lang/lua/work/lua-5.1.4.
>>>>> *** Error code 1
>>>>>
>>>>> Stop in /usr/ports/lang/lua.
>>>>>
>>>>> ===>>>   make failed for lang/lua
>>>>> ===>>>   Aborting update
>>>>>
>>>>> Terminated
>>>>> Terminated
>>>>>
>>>>> This is very strange!
>>>> What is strange ? It is exactly the same problem as in the first message
>>>> started this thread. You must use -fPIC flag for compiler when compiling
>>>> objects that shall be later linked into dso. So, for lua case, -fPIC
>>>> must be present on the cc -c command line.
>>> This therefore strange, since this problem with lua occurs on machines,
>>> where I've set "CFLAGS=" and "COPTFLAGS=" as in
>>> /usr/share/examples/etc/make.conf and on one box, one box I accidentally
>>> set those flags to "CFLAGS+=" and "COPTFLAGS+=" and there it works and
>>> the -fPIC flag is set by the FreeBSD's port framework.
>>>
>>> So I guess there is a bug introduced with one of the last Mk-files
>>> updates.
>>>
>>
>> As suggested by the "howto" for using newer GCC versions,
>> http://www.freebsd.org/doc/en/articles/custom-gcc/article.html you are
>> supposed to use CFLAGS+= to add additional compile flags.
>
> Just for the record I'd like to repeat, that the error above mentioned
> is also with the legacy FreeBSD's gcc 4.2.X compiler.
>
> As Kostik Belousov made clear in his last posting, the error occurs due
> to a missing -fPIC - which is now clear to me.
>
> People not sleeping with their OS, like myself, would simply copy the
> make.conf from /usr/share/examples/etc/ and set some additional flags.
> Then the problem will occur again. Maybe it would be wise to reflect
> this issue by some additional words in make.conf?

As stated earlier, the following fails in /etc/make.conf for lang/lua:

   CFLAGS= -O2 -fno-strict-aliasing -pipe -msse3

The next one works ( += instead of = ) and -fPIC is preserved this way:

   CFLAGS+= -O2 -fno-strict-aliasing -pipe -msse3

Thanks, Kostik and Daniel for clearing this. I think, like Oliver, that 
this should be mentioned in /etc/make.conf or make.conf(5).

Rainer

>> By the way, "-O2 -fno-strict-aliasing -pipe" are the default flags, that
>> are used when CFLAGS is not set by the user.
>>
>> COPTFLAGS is used only to build the kernel and doing it with non-system
>> GCC is not likely to be safe.
>>
>> Daniel
>
>
> Oliver



More information about the freebsd-ports mailing list