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

From: Andreas Tobler <andreast-list_at_fgznet.ch>
Date: Wed, 28 Dec 2011 18:57:40 +0100
On 28.12.11 17:31, Rainer Hurling wrote:
> 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?

This commit _is_ responsible for this failure. I see the same. (Added Ed_at_)

Andreas
Received on Wed Dec 28 2011 - 16:57:45 UTC

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