trinity-devel@lists.pearsoncomputing.net

Message: previous - next
Month: May 2015

tdelibs on FreeBSD create unusable libraries

From: "Dr. Nikolaus Klepp" <office@...>
Date: Mon, 4 May 2015 08:50:04 +0200
Hi all!

I ran into a problem at building TDE for FreeBSD last weekend:
- When I compile "tdelibs" with "-DHAVE_PIE_SUPPORT=OFF", then "tquic" segfaults when building "tdebase", i.e. dlopen() of any library built without PIE fails.
- When I compile "tdelibs" without "-DHAVE_PIE_SUPPORT=OFF", then the build of "tdelibs" fails at certain points with "/usr/local/bin/ld: /usr/lib/crt1.o: relocation R_X86_64_32 against `_DYNAMIC' can not be used when making a shared object; recompile with -fPIC"
- When I add "-shared" to the compiler switches for cmake, the build fails.


I assume that HAVE_PIE_SUPPORT is a must, otherwise the built libraries do not work. Compilig fails the first time on "kgrantpty" with these messages:

Scanning dependencies of target kgrantpty
make -f tdecore/CMakeFiles/kgrantpty.dir/build.make tdecore/CMakeFiles/kgrantpty.dir/build
/usr/local/bin/cmake -E cmake_progress_report /tmp/tdelibs.build/CMakeFiles 
[ 11%] Building C object tdecore/CMakeFiles/kgrantpty.dir/kgrantpty.c.o
cd /tmp/tdelibs.build/tdecore && /usr/bin/gcc  -DHAVE_CONFIG_H -fPIC -I/opt/trinity/include -I/opt/trinity/include/tqt -I/tmp/tdelibs.build/tdecore -I/tmp/tdelibs.build -I/tmp/tdelibs/tdecore -I/tmp/tdelibs/tdecore/network -I/tmp/tdelibs/dcop -I/tmp/tdelibs/libltdl -I/tmp/tdelibs/tdefx -I/tmp/tdelibs/tdeui -I/tmp/tdelibs/tdeio/tdeio    -fPIE -o CMakeFiles/kgrantpty.dir/kgrantpty.c.o   -c /tmp/tdelibs/tdecore/kgrantpty.c
Linking C executable kgrantpty
cd /tmp/tdelibs.build/tdecore && /usr/local/bin/cmake -E cmake_link_script CMakeFiles/kgrantpty.dir/link.txt --verbose=1
/usr/bin/gcc   -fPIC  -pie CMakeFiles/kgrantpty.dir/kgrantpty.c.o  -o kgrantpty  -L/opt/trinity/lib  -L/usr/local/lib  
/usr/local/bin/ld: /usr/lib/crt1.o: relocation R_X86_64_32 against `_DYNAMIC' can not be used when making a shared object; recompile with -fPIC
/usr/lib/crt1.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
*** Error code 1

I can add a "-shared" to the compiler directive and this part will work, i.e:

$ /usr/bin/gcc  -DHAVE_CONFIG_H -fPIC -I/opt/trinity/include -I/opt/trinity/include/tqt -I/tmp/tdelibs.build/tdecore -I/tmp/tdelibs.build -I/tmp/tdelibs/tdecore -I/tmp/tdelibs/tdecore/network -I/tmp/tdelibs/dcop -I/tmp/tdelibs/libltdl -I/tmp/tdelibs/tdefx -I/tmp/tdelibs/tdeui -I/tmp/tdelibs/tdeio/tdeio    -fPIE -o CMakeFiles/kgrantpty.dir/kgrantpty.c.o   -c /tmp/tdelibs/tdecore/kgrantpty.c -shared



But it fails later once again and I absolutly do not know what to do about it:

[ 40%] Building C object tdeio/misc/kpac/CMakeFiles/kpac_dhcp_helper.dir/kpac_dhcp_helper.c.o
cd /tmp/tdelibs.build/tdeio/misc/kpac && /usr/bin/gcc  -DHAVE_CONFIG_H -D_LARGEFILE64_SOURCE=1 -fPIC -I/opt/trinity/include -I/opt/trinity/include/tqt -I/tmp/tdelibs.build/tdeio/misc/kpac -I/tmp/tdelibs.build -I/tmp/tdelibs.build/tdecore -I/tmp/tdelibs.build/kjs -I/tmp/tdelibs -I/tmp/tdelibs/dcop -I/tmp/tdelibs/tdecore -I/tmp/tdelibs/tdecore/network -I/tmp/tdelibs/tdeio -I/tmp/tdelibs/tdeio/tdeio -I/tmp/tdelibs/kded    -fPIE -o CMakeFiles/kpac_dhcp_helper.dir/kpac_dhcp_helper.c.o   -c /tmp/tdelibs/tdeio/misc/kpac/kpac_dhcp_helper.c
Linking C executable kpac_dhcp_helper
cd /tmp/tdelibs.build/tdeio/misc/kpac && /usr/local/bin/cmake -E cmake_link_script CMakeFiles/kpac_dhcp_helper.dir/link.txt --verbose=1
/usr/bin/gcc   -fPIC  -pie CMakeFiles/kpac_dhcp_helper.dir/kpac_dhcp_helper.c.o  -o kpac_dhcp_helper  -L/opt/trinity/lib  
/usr/local/bin/ld: /usr/lib/crt1.o: relocation R_X86_64_32 against `_DYNAMIC' can not be used when making a shared object; recompile with -fPIC
/usr/lib/crt1.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
*** Error code 1


At this pount adding "-shared" does not solve the problem:

/usr/bin/gcc   -fPIC  -pie CMakeFiles/kpac_dhcp_helper.dir/kpac_dhcp_helper.c.o  -o kpac_dhcp_helper  -L/opt/trinity/lib -shared
/usr/local/bin/ld: CMakeFiles/kpac_dhcp_helper.dir/kpac_dhcp_helper.c.o: relocation R_X86_64_PC32 against symbol `get_port' can not be used when making a shared object; recompile with -fPIC
/usr/local/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status


So, what am I missing?

Nik




-- 
Please do not email me anything that you are not comfortable also sharing with the NSA.

Dr. Nikolaus Klepp
Einnehmerstra├če 14
A-4810 Gmunden
Tel.: +43 650 82 11 724
email: office@...