< Previous by Date Date Index Next by Date >
< Previous in Thread Thread Index Next in Thread >

Re: [reSIProcate] building shared libraries on AMD64


Well, this appears to break the shared library build on OS X. (Missing libstdc++ symbols) I am trying to fix this. (This will require .dylib support from the build system)

Best regards,
Byron Campen

Hrm, looks like the object files need to be compiled with -fPIC too. I will try the following slightly different patch:

Index: build/Makefile.tools
===================================================================
--- build/Makefile.tools        (revision 6598)
+++ build/Makefile.tools        (working copy)
@@ -43,6 +43,12 @@
LNDIR          = $(shell pwd)/$(ROOT)/build/lndir.sh
CFLAGS         += -Wall
CXXFLAGS       += -Wall
+
+ifeq ($(BUILD_SHARED_LIBS),yes)
+CFLAGS   += -fPIC
+CXXFLAGS += -fPIC
+endif
+
DFLAG_INTEGRATED = -MMD
DEBUG_FLAG     = -g
COMPILE_SMALL_FLAG = -Os -fno-inline -fno-keep-static-consts

Best regards,
Byron Campen


hi Byron

here is the error when building rutil shared:


gcc -fPIC -shared -o obj.debug.Linux.x86_64/librutil.so obj.debug.Linux.x86_64/AbstractFifo.o obj.debug.Linux.x86_64/ BaseException.o obj.debug.Linux.x86_64/Coders.o obj.debug.Linux.x86_64/Condition.o obj.debug.Linux.x86_64/ CountStream.o obj.debug.Linux.x86_64/Data.o obj.debug.Linux.x86_64/ DataStream.o obj.debug.Linux.x86_64/DnsUtil.o obj.debug.Linux.x86_64/FileSystem.o obj.debug.Linux.x86_64/ HeapInstanceCounter.o obj.debug.Linux.x86_64/Lock.o obj.debug.Linux.x86_64/Log.o obj.debug.Linux.x86_64/Logger.o obj.debug.Linux.x86_64/MD5Stream.o obj.debug.Linux.x86_64/Mutex.o obj.debug.Linux.x86_64/OpenSSLInit.o obj.debug.Linux.x86_64/ ParseBuffer.o obj.debug.Linux.x86_64/Poll.o obj.debug.Linux.x86_64/ RWMutex.o obj.debug.Linux.x86_64/Random.o obj.debug.Linux.x86_64/ RecursiveMutex.o obj.debug.Linux.x86_64/SelectInterruptor.o obj.debug.Linux.x86_64/SHA1Stream.o obj.debug.Linux.x86_64/ Socket.o obj.debug.Linux.x86_64/Subsystem.o obj.debug.Linux.x86_64/ SysLogBuf.o obj.debug.Linux.x86_64/SysLogStream.o obj.debug.Linux.x86_64/ThreadIf.o obj.debug.Linux.x86_64/Timer.o obj.debug.Linux.x86_64/vmd5.o obj.debug.Linux.x86_64/dns/AresDns.o obj.debug.Linux.x86_64/dns/DnsAAAARecord.o obj.debug.Linux.x86_64/ dns/DnsCnameRecord.o obj.debug.Linux.x86_64/dns/DnsHostRecord.o obj.debug.Linux.x86_64/dns/DnsNaptrRecord.o obj.debug.Linux.x86_64/ dns/DnsSrvRecord.o obj.debug.Linux.x86_64/dns/DnsStub.o obj.debug.Linux.x86_64/dns/ExternalDnsFactory.o obj.debug.Linux.x86_64/dns/RRCache.o obj.debug.Linux.x86_64/dns/ RRList.o obj.debug.Linux.x86_64/dns/RRVip.o obj.debug.Linux.x86_64/ dns/QueryTypes.o obj.debug.Linux.x86_64/dns/RROverlay.o obj.debug.Linux.x86_64/stun/Stun.o obj.debug.Linux.x86_64/stun/Udp.o /usr/bin/ld: obj.debug.Linux.x86_64/AbstractFifo.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC obj.debug.Linux.x86_64/AbstractFifo.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [obj.debug.Linux.x86_64/librutil.so] Error 1


the system is Ubuntu 6.06 AMD64, g++ v4.0.3


my fix was to add the -fPIC compile flag:
(you should verify if this is correct)


--- build/Makefile.tools        (revision 6599)
+++ build/Makefile.tools        (working copy)
@@ -41,8 +41,8 @@
 DMANGLE                =
 INSTALL                = install
 LNDIR          = $(shell pwd)/$(ROOT)/build/lndir.sh
-CFLAGS         += -Wall
-CXXFLAGS       += -Wall
+CFLAGS         += -Wall -fPIC
+CXXFLAGS       += -Wall -fPIC
 DFLAG_INTEGRATED = -MMD
 DEBUG_FLAG     = -g
 COMPILE_SMALL_FLAG = -Os -fno-inline -fno-keep-static-consts


/alfred

Byron Campen wrote:
I see some logic in the build system that was meant to handle this sort of thing, but it appears to not be working. Could you send the link-line?
Best regards,
Byron Campen
hi

when building resiprocate with "Should the resip libraries be built
shared?" set to "Yes", I got the following error:


/usr/bin/ld: obj.debug.Linux.x86_64/AbstractFifo.o: relocation
R_X86_64_32 against `a local symbol' can not be used when making a
shared object; recompile with -fPIC
obj.debug.Linux.x86_64/AbstractFifo.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [obj.debug.Linux.x86_64/librutil.so] Error 1


adding the "-fPIC" option solved the problem, but I am not sure if
this is the correct way to solve it.. patch below:


Index: build/Makefile.tools
===================================================================
--- build/Makefile.tools        (revision 6553)
+++ build/Makefile.tools        (working copy)
@@ -41,8 +41,8 @@
 DMANGLE                =
 INSTALL                = install
 LNDIR          = $(shell pwd)/$(ROOT)/build/lndir.sh
-CFLAGS         += -Wall
-CXXFLAGS       += -Wall
+CFLAGS         += -Wall -fPIC
+CXXFLAGS       += -Wall -fPIC
 DFLAG_INTEGRATED = -MMD
 DEBUG_FLAG     = -g
 COMPILE_SMALL_FLAG = -Os -fno-inline -fno-keep-static-consts


_______________________________________________
resiprocate-devel mailing list
resiprocate-devel@xxxxxxxxxxxxxxxxxxx
https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel


_______________________________________________
resiprocate-devel mailing list
resiprocate-devel@xxxxxxxxxxxxxxxxxxx
https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel

Attachment: smime.p7s
Description: S/MIME cryptographic signature