On Feb 17, 2010, at 11:23 AM, Jeff Squyres wrote:
> Here's my proposal on how to change the wrapper compilers to understand the
> difference between static and dynamic linking:
>
> *** FIRST: give the wrapper the ability to link one library or all libraries
> - wrapper data text files grow a new option: libs_private (a la pkg-config(1)
> files)
> - wrapper data text files list -l<top_lib> in libs, and everything else in
> libs_private. For example, for mpicc:
> libs=-lmpi
> libs_private=-lopen-rte -lopen-pal
>
> *** NEXT: give the wrappers the ability to switch between just ${libs} or
> ${libs}+${libs_private}. Pseudocode:
> - wrapper always adds ${libs} to the argv
> - wrapper examines each argv[x]:
> --ompi:shared) found_in_argv=1 ;;
> --ompi:static) add ${libs_private} ; found_in_argv=1 ;;
> - if (!found_in_argv)
> - if default set via configure, add ${libs_private} (SEE BELOW)
This is horrible! Users want to be able to specify -Bstatic or -static or
whatever and have the right things happen. I have a better idea - since
there's basically no set of users which use OMPI's libopal and some other
libopal (and indeed, that's near impossible do to the horrible API exposed by
opal (data type sizes changing based on configure arguments, for example),
let's give up and just have libmpi.{so,a} and completely avoid this whole rat
hole of a problem?
There's simply no way your solution is workable for most users. They'll just
end up wondering why when they do -Bstatic (or whatever the option is on their
compiler) they get missing symbol link errors.
Brian