[reSIProcate] building shared libraries on AMD64
Byron Campen
bcampen at estacado.net
Fri Sep 22 15:54:21 CDT 2006
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 at list.sipfoundry.org
>>>> https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel
>>
>
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel at list.sipfoundry.org
> https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2369 bytes
Desc: not available
URL: <http://list.resiprocate.org/pipermail/resiprocate-devel/attachments/20060922/f68ad779/attachment.bin>
More information about the resiprocate-devel
mailing list