Date: Wed, 7 Mar 2012 12:37:15 -0800 From: Doug Hardie <bc979@lafn.org> To: Volodymyr Kostyrko <c.kworr@gmail.com> Cc: "questions@FreeBSD.org" <questions@freebsd.org> Subject: Re: Dynamic Libraries Message-ID: <3248CBB5-F412-4F4D-96B1-16F134A87DAC@lafn.org> In-Reply-To: <4F572CFF.8030708@gmail.com> References: <E64D58F0-0EDD-46A1-B022-2CC8BB64BC29@lafn.org> <4F572CFF.8030708@gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 7 March 2012, at 01:40, Volodymyr Kostyrko wrote: > Doug Hardie wrote: >> I have encountered something that I do not understand. Everything = works fine. Basically I have a bunch of user modules (low level) that = are built into a dynamic library. If I write top level code that calls = modules in that library, everything works just fine on i386 and AMD64. = However, the application involved has another library of modules. Some = of them call modules in the low level library. The top level code call = modules in both libraries. Often when it calls a module in the mid = level library, that module calls several modules in the low level = library. >>=20 >> All this works just fine on i386. However, when I compile everything = on AMD64 I get an error message that says the lower level library needs = to be compiled with fPIC. If I add that to the Makefile for the lower = level library and rebuild everything, it all works again. I don't = understand why the fPIC is required for AMD64. >>=20 >> Also, how do I tell if the lower level library is being dynamically = linked at run time, or being directly incorporated into the mid level = library or top level application? Since both of these libraries are = quite large, and they are in use by a number of top level applications, = I want just one copy to exist in physical memory. >=20 > This sounds exactly like compiling with clang through ccache. There = are issues with clang and ccache cooperation. Actually the one you may = hit is libtool detecting implicit fPIC requirement when running clang = through ccache. The Makefile specifies GCC and its FreeBSD 8.0. I don't believe clang = was in that soon, but I may be wrong. How can I check that? Where is = clang? I have installed 9.0 on another system but haven't had time to = try that out yet.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3248CBB5-F412-4F4D-96B1-16F134A87DAC>