Re: /usr/local/lib/gcc46/gcc/x86_64-portbld-freebsd9.0/4.6.3/../../../libstdc++.a: could not read symbols: Bad value

From: O. Hartmann <ohartman_at_zedat.fu-berlin.de>
Date: Wed, 28 Dec 2011 18:47:41 +0100
Am 12/28/11 17:31, schrieb Rainer Hurling:
> On 28.12.2011 15:29 (UTC+1), Kostik Belousov wrote:
>> On Wed, Dec 28, 2011 at 03:10:12PM +0100, O. Hartmann wrote:
>>> Am 12/28/11 14:58, schrieb Kostik Belousov:
>>>> On Wed, Dec 28, 2011 at 11:48:28AM +0100, O. Hartmann wrote:
>>>>> Hello out here.
>>>>>
>>>>> I run into a problem since one of the last portupdates and I do not
>>>>> know
>>>>> whether this has to do with binutils or gcc46 or even FreeBSD 9.0/10.0
>>>>> AMD64.
>>>>>
>>>>> Background:
>>>>> We use a scientific graphical toolset for planetary research called
>>>>> ISIS3, which is provided by the USGS. We patched ISIS3 to run on
>>>>> FreeBSD
>>>>> 8/9/10 so far and it ran well with FreeBSD 8.2-STABLE and 9.0-PRE a
>>>>> couple of weeks ago.
>>>>> On all of my boxes, I do frequently a portupgrade, so I saw
>>>>> binutils got
>>>>> bumped up and gcc 4.6 is also getting really frequently changed
>>>>> these days.
>>>>> After a some portupdates within the last weeks, I just decided to
>>>>> compile ISIS3 again to keep it "fresh and on track", but it won't
>>>>> compile anymore.
>>>>>
>>>>> On all FreeBSD 9.0-PRERELEASE and FreeBSD 10.0-CURRENT (all AMD64 and
>>>>> CLANG built) I receive in some subfolders containing sources the
>>>>> follwoing error:
>>>>>
>>>>> [...]
>>>>>      Adding API object [UniqueIOCachingAlgorithm]
>>>>>      Adding API object [UniversalGroundMap]
>>>>>      Adding API object [UserInterface]
>>>>>      Adding API object [VariableLineScanCameraDetectorMap]
>>>>>      Adding API object [VecFilter]
>>>>>      Adding API object [WorldMapper]
>>>>>      Adding API object [iException]
>>>>>      Adding API object [iString]
>>>>>      Adding API object [iTime]
>>>>>    Working on Package [mex] (11:30:15)
>>>>>      Adding API object [HrscCamera]
>>>>> /usr/local/bin/ld:
>>>>> /usr/local/lib/gcc46/gcc/x86_64-portbld-freebsd9.0/4.6.3/../../../libstdc++.a(functexcept.o):
>>>>>
>>>>> relocation R_X86_64_32 against `std::bad_exception::~bad_exception()'
>>>>> can not be used when making a shared object; recompile with -fPIC
>>>>> /usr/local/lib/gcc46/gcc/x86_64-portbld-freebsd9.0/4.6.3/../../../libstdc++.a:
>>>>>
>>>>> could not read symbols: Bad value
>>>>> collect2: ld returned 1 exit status
>>>>> gmake[5]: *** [plugin] Error 1
>>>>> cp: libHrscCamera.so: No such file or directory
>>>>> gmake[4]: *** [install] Error 1
>>>> The error is completely clear as it is: the build tries to link static
>>>> library libstdc++.so into shared object. This is not supported.
>>>
>>> Thanks, Kostik, for the fast response.
>>> The error isn't so clear to me, sorry. I thought libstdc++.a is the
>>> static library and it is taken to be referenced/compiled into a shared
>> Linked in.
>>
>>> object created by the application I try to compile.
>> Right, and this is not supported. Code linked into shared object must
>> be compiled PIC. An .a library usually does not contain objects compiled
>> by PIC, ld just dutifully reported back.
>>
>>>
>>> I'm much more confused now, since I thought the last time I compiled
>>> that piece of software, I never got any error like that. Well, clang
>>> fails with some obscure errors on the code itself and I'm unwilling to
>>> correct them, I'll try the legacy gcc 4.2.1 and will report what's
>>> happening.
>>
>> It might have worked by accident (because libstdc++.a objects referenced
>> during the link did not carried unsupported relocations), or, much more
>> likely, the build system has changed and started doing stupid things.
>> It must not link static libraries into shared objects.
>>
>> You should examine why it does this, and fix it. Changing compilers is
>> just wasting a time.
> 
> 
> Hmm, I get a similar error when trying to build lang/gcc46 on recent
> 10-CURRENT:
> 
> ----------------------------------------------------------------
> [..snip..]
> Making all in include
> gmake[4]: Entering directory
> `/usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include'
> 
> mkdir -p ./x86_64-portbld-freebsd10.0/bits/stdc++.h.gch
> /usr/ports/lang/gcc46/work/build/./gcc/xgcc -shared-libgcc
> -B/usr/ports/lang/gcc46/work/build/./gcc -nostdinc++
> -L/usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/src
> -L/usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/src/.libs
> -B/usr/local/x86_64-portbld-freebsd10.0/bin/
> -B/usr/local/x86_64-portbld-freebsd10.0/lib/ -isystem
> /usr/local/x86_64-portbld-freebsd10.0/include -isystem
> /usr/local/x86_64-portbld-freebsd10.0/sys-include    -x c++-header
> -nostdinc++ -g -O2 -pipe -I/usr/local/include -fno-strict-aliasing
> -I/usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include/x86_64-portbld-freebsd10.0
> -I/usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include
> -I/usr/ports/lang/gcc46/work/gcc-4.6-20111209/libstdc++-v3/libsupc++ -O2
> -g -std=gnu++0x
> /usr/ports/lang/gcc46/work/gcc-4.6-20111209/libstdc++-v3/include/precompiled/stdc++.h
> \
> -o x86_64-portbld-freebsd10.0/bits/stdc++.h.gch/O2ggnu++0x.gch
> In file included from
> /usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include/chrono:38:0,
> 
>                  from
> /usr/ports/lang/gcc46/work/gcc-4.6-20111209/libstdc++-v3/include/precompiled/stdc++.h:100:
> 
> /usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include/ratio:133:31:
> error: macro "_Static_assert" passed 3 arguments, but takes just 2
> In file included from
> /usr/ports/lang/gcc46/work/gcc-4.6-20111209/libstdc++-v3/include/precompiled/stdc++.h:103:0:
> 
> /usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include/future:376:39:
> error: macro "_Static_assert" passed 4 arguments, but takes just 2
> In file included from
> /usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include/memory:85:0,
> 
>                  from
> /usr/ports/lang/gcc46/work/gcc-4.6-20111209/libstdc++-v3/include/precompiled/stdc++.h:81:
> 
> /usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include/bits/unique_ptr.h:
> In constructor 'constexpr std::unique_ptr<_Tp, _Dp>::unique_ptr()':
> /usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include/bits/unique_ptr.h:117:59:
> error: constexpr constructor does not have empty body
> /usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include/bits/unique_ptr.h:
> In constructor 'constexpr std::unique_ptr<_Tp,
> _Dp>::unique_ptr(std::nullptr_t)':
> /usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include/bits/unique_ptr.h:139:59:
> error: constexpr constructor does not have empty body
> /usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include/bits/unique_ptr.h:
> In constructor 'constexpr std::unique_ptr<_Tp [], _Dp>::unique_ptr()':
> /usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include/bits/unique_ptr.h:279:59:
> error: constexpr constructor does not have empty body
> /usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include/bits/unique_ptr.h:
> In constructor 'constexpr std::unique_ptr<_Tp [],
> _Dp>::unique_ptr(std::nullptr_t)':
> /usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include/bits/unique_ptr.h:301:59:
> error: constexpr constructor does not have empty body
> In file included from
> /usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include/cassert:45:0,
> 
>                  from
> /usr/ports/lang/gcc46/work/gcc-4.6-20111209/libstdc++-v3/include/precompiled/stdc++.h:34:
> 
> /usr/include/assert.h: At global scope:
> /usr/include/assert.h:62:23: error: '_Static_assert' does not name a type
> /usr/include/assert.h:62:23: error: '_Static_assert' does not name a type
> gmake[4]: ***
> [x86_64-portbld-freebsd10.0/bits/stdc++.h.gch/O2ggnu++0x.gch] Fehler 1
> gmake[4]: Leaving directory
> `/usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3/include'
> 
> gmake[3]: *** [all-recursive] Fehler 1
> gmake[3]: Leaving directory
> `/usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3'
> gmake[2]: *** [all] Fehler 2
> gmake[2]: Leaving directory
> `/usr/ports/lang/gcc46/work/build/x86_64-portbld-freebsd10.0/libstdc++-v3'
> gmake[1]: *** [all-target-libstdc++-v3] Fehler 2
> gmake[1]: Leaving directory `/usr/ports/lang/gcc46/work/build'
> gmake: *** [bootstrap-lean] Fehler 2
> *** Error code 1
> Stop in /usr/ports/lang/gcc46.
> ----------------------------------------------------------------
> 
> 
> I guess that this error could have something to do with r228902 from
> 2011-12-26:
> 
> /head/include/assert.h: As per C11, add static_assert() to <assert.h>.
> 
> lang/gcc46 builts fine for me before this revision. What do you think
> about it?
> Rainer

I already posted a PR.
The first time I saw a similar error was, when I made builtworld on FBSD
10.0 with WITH_ICONV=YES set in /etc/src.conf. I wasn't even able to
build the lang/gcc46 with the legacy gcc42 compiler.

But the problem I reported while compiling a non-poted piece of software
also occurs with the legacy gcc 4.2, but there the error is looking
something different, reporting some missing vtable: or similar.

Oliver



Received on Wed Dec 28 2011 - 16:47:43 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:22 UTC