I understand pretty much nothing in your mails :)

The problem I was trying to fix below is that linking hwloc plugins on
Darwin failed because plugins referred to hwloc-core symbols. Nothing on
the libtool command-line said where to find those symbols (I don't
understand why it worked on other platforms).
I added -lhwloc as a way to tell the linker "those symbols are there". I
didn't think it would statically link libhwloc inside the plugins, and
it doesn't seem to do so (from what I see in objdump). Is this what you
mean?

It's really a problem when linking, not about loading (and scopes that I
don't know anything about), but I couldn't test loading before linking
worked.

Anyway, how should I solve this?

Brice



Le 05/09/2012 15:58, Jeff Squyres a écrit :
> I should clarify...
>
> In OMPI, if we're building libmpi.so, we default to building plugins as DSOs. 
>  If we're building libmpi.a, then we slurp all the plugins into libmpi.a 
> (i.e., don't build them as DSOs).  This avoids many of the issues in table 2.
>
>
> On Sep 5, 2012, at 9:54 AM, Jeff Squyres wrote:
>
>> This is a bad idea.
>>
>> I'm trying to remember the reason why, but we explicitly *removed* such -l 
>> statements (e.g., removed "-lmpi" from the plugins).  Hmm...  Oh, right.  
>> Every time I think I understand linkers, I find out that I don't.  So last 
>> time we had a Big Confusion Discussion About Linkers (BCDAL), I wrote it all 
>> up:
>>
>>    https://svn.open-mpi.org/trac/ompi/wiki/Linkers
>>
>> The 4th column in these tables is labeled "OMPI DSO components depend on 
>> libmpi.so?" (which is somewhat of a misnomer, because not all components are 
>> at the MPI layer -- so consider it to mean "OMPI DSO components depend on 
>> some OMPI library, such as libmpi.so?")
>>
>> The problem cases are #9 and #12 in the first table: i.e., static linking.
>>
>> Instead, we use lt_dladvise() to open hwloc plugins in the same scope as the 
>> main application.
>>
>> Of course, this has its own tradeoffs -- if hwloc itself, is opened as a 
>> plugin in a private scope, then the plugins won't be able to find the 
>> symbols it needs (i.e., cases #14, #15, #17, #18, #20, #21, #23, and #24 in 
>> the 2nd table). 
>>
>> Until POSIX effects hierarchical linker scopes (or at least something like 
>> "please dlopen this plugin and put it in XYZ linker scope"), there's really 
>> no good solution here.  :-(
>>
>>
>>
>> On Sep 5, 2012, at 6:03 AM, <svn-commit-mai...@open-mpi.org> wrote:
>>
>>> Author: bgoglin (Brice Goglin)
>>> Date: 2012-09-05 06:03:52 EDT (Wed, 05 Sep 2012)
>>> New Revision: 4815
>>> URL: https://svn.open-mpi.org/trac/hwloc/changeset/4815
>>>
>>> Log:
>>> Pass -lhwloc to all plugins, at least Darwin wants it
>>> (plugins use some hwloc functions)
>>>
>>> Define a plugins_ldflags with all common stuff for plugins
>>> (this somehow reverts r4811)
>>>
>>> Text files modified: 
>>>  branches/components/src/Makefile.am |    13 +++++++------                  
>>>          
>>>  1 files changed, 7 insertions(+), 6 deletions(-)
>>>
>>> Modified: branches/components/src/Makefile.am
>>> ==============================================================================
>>> --- branches/components/src/Makefile.am     Wed Sep  5 06:03:36 2012        
>>> (r4814)
>>> +++ branches/components/src/Makefile.am     2012-09-05 06:03:52 EDT (Wed, 
>>> 05 Sep 2012)      (r4815)
>>> @@ -21,6 +21,7 @@
>>>
>>> pluginsdir = $(libdir)/hwloc
>>> plugins_LTLIBRARIES = 
>>> +plugins_ldflags = -module -avoid-version -lhwloc
>>> AM_CPPFLAGS += -DHWLOC_PLUGINS_DIR=\"$(pluginsdir)\"
>>>
>>> # Sources and ldflags
>>> @@ -40,7 +41,6 @@
>>>        topology-xml.c \
>>>        topology-xml-nolibxml.c
>>> ldflags =
>>> -common_ldflags = 
>>>
>>> # Conditionally add to the sources and ldflags
>>>
>>> @@ -52,7 +52,7 @@
>>> xml_libxml_la_SOURCES = topology-xml-libxml.c
>>> xml_libxml_la_CPPFLAGS = $(AM_CPPFLAGS) -DHWLOC_BUILD_PLUGIN
>>> xml_libxml_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_LIBXML2_CFLAGS)
>>> -xml_libxml_la_LDFLAGS = $(common_ldflags) -module -avoid-version 
>>> $(HWLOC_LIBXML2_LIBS)
>>> +xml_libxml_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_LIBXML2_LIBS)
>>> endif
>>> endif HWLOC_HAVE_LIBXML2
>>>
>>> @@ -64,7 +64,7 @@
>>> core_libpci_la_SOURCES = topology-libpci.c
>>> core_libpci_la_CPPFLAGS = $(AM_CPPFLAGS) -DHWLOC_BUILD_PLUGIN
>>> core_libpci_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_PCI_CFLAGS)
>>> -core_libpci_la_LDFLAGS = $(common_ldflags) -module -avoid-version 
>>> $(HWLOC_PCI_LIBS)
>>> +core_libpci_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_PCI_LIBS)
>>> endif
>>> endif HWLOC_HAVE_LIBPCI
>>>
>>> @@ -105,7 +105,8 @@
>>> endif HWLOC_HAVE_FREEBSD
>>>
>>> if HWLOC_HAVE_GCC
>>> -common_ldflags += -no-undefined
>>> +ldflags += -no-undefined
>>> +plugins_ldflags += -no-undefined
>>> endif HWLOC_HAVE_GCC
>>>
>>> if HWLOC_HAVE_WINDOWS
>>> @@ -136,7 +137,7 @@
>>> # Installable library
>>>
>>> libhwloc_la_SOURCES = $(sources)
>>> -libhwloc_la_LDFLAGS = $(common_ldflags) $(ldflags) -version-info 
>>> $(libhwloc_so_version) $(HWLOC_LIBS)
>>> +libhwloc_la_LDFLAGS = $(ldflags) -version-info $(libhwloc_so_version) 
>>> $(HWLOC_LIBS)
>>>
>>> if HWLOC_HAVE_PLUGINS
>>> AM_CPPFLAGS += $(LTDLINCL)
>>> @@ -168,5 +169,5 @@
>>> check_LTLIBRARIES = core_fake.la
>>> core_fake_la_SOURCES = topology-fake.c
>>> core_fake_la_CPPFLAGS = $(AM_CPPFLAGS) -DHWLOC_BUILD_PLUGIN
>>> -core_fake_la_LDFLAGS = $(common_ldflags) -module -avoid-version -rpath 
>>> /nowhere # force libtool to build a shared-library even it's check-only
>>> +core_fake_la_LDFLAGS = $(plugins_ldflags) -rpath /nowhere # force libtool 
>>> to build a shared-library even it's check-only
>>> endif
>>> _______________________________________________
>>> hwloc-svn mailing list
>>> hwloc-...@open-mpi.org
>>> http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-svn
>>
>> -- 
>> Jeff Squyres
>> jsquy...@cisco.com
>> For corporate legal information go to: 
>> http://www.cisco.com/web/about/doing_business/legal/cri/
>>
>>
>> _______________________________________________
>> hwloc-devel mailing list
>> hwloc-de...@open-mpi.org
>> http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-devel
>

Reply via email to