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

From: Rainer Hurling <rhurlin_at_gwdg.de>
Date: Wed, 28 Dec 2011 17:31:57 +0100
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
Received on Wed Dec 28 2011 - 15:55:29 UTC

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