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
_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to