[petsc-users] Exhausted all shared linker guesses. Could not determine how to create a shared library!

Fande Kong fdkong.jd at gmail.com
Wed Mar 10 14:27:23 CST 2021


I guess it was encoded in mpicc

petsc % mpicc -show
x86_64-apple-darwin13.4.0-clang -march=core2 -mtune=haswell -Wl,-pie
-Wl,-headerpad_max_install_names -Wl,-dead_strip_dylibs
-Wl,-rpath,/Users/kongf/miniconda3/envs/testpetsc/lib
-L/Users/kongf/miniconda3/envs/testpetsc/lib -Wl,-commons,use_dylibs
-I/Users/kongf/miniconda3/envs/testpetsc/include
-L/Users/kongf/miniconda3/envs/testpetsc/lib -lmpi -lpmpi


Thanks,

Fande

On Wed, Mar 10, 2021 at 12:51 PM Satish Balay <balay at mcs.anl.gov> wrote:

> > LDFLAGS_LD=-pie -headerpad_max_install_names -dead_strip_dylibs -rpath
> /Users/kongf/miniconda3/envs/testpetsc/lib
> -L/Users/kongf/miniconda3/envs/testpetsc/lib
>
> Does conda compiler pick up '-pie' from this env variable? If so - perhaps
> its easier to just modify it?
>
> Or is it encoded in mpicc wrapper? [mpicc -show]
>
> Satish
>
> On Wed, 10 Mar 2021, Fande Kong wrote:
>
> > Thanks Barry,
> >
> > Got the same result, but  "-pie" was not filtered out somehow.
> >
> > I did changes like this:
> >
> > kongf at x86_64-apple-darwin13 petsc % git diff
> > diff --git a/config/BuildSystem/config/framework.py
> > b/config/BuildSystem/config/framework.py
> > index beefe82956..c31fbeb95e 100644
> > --- a/config/BuildSystem/config/framework.py
> > +++ b/config/BuildSystem/config/framework.py
> > @@ -504,6 +504,8 @@ class Framework(config.base.Configure,
> > script.LanguageProcessor):
> >     lines = [s for s in lines if s.find('Load a valid targeting module or
> > set CRAY_CPU_TARGET') < 0]
> >     # pgi dumps filename on stderr - but returns 0 errorcode'
> >     lines = [s for s in lines if lines != 'conftest.c:']
> > +   # in case -pie is always being passed to linker
> > +   lines = [s for s in lines if s.find('-pie being ignored. It is only
> > used when linking a main executable') < 0]
> >     if lines: output = reduce(lambda s, t: s+t, lines, '\n')
> >     else: output = ''
> >     log.write("Linker stderr after filtering:\n"+output+":\n")
> >
> > The log was attached again.
> >
> > Thanks,
> >
> > Fande
> >
> >
> > On Wed, Mar 10, 2021 at 12:05 PM Barry Smith <bsmith at petsc.dev> wrote:
> >
> > >  Fande,
> > >
> > >    Please add in config/BuildSystem/config/framework.py line 528 two
> new
> > > lines
> > >
> > >       # pgi dumps filename on stderr - but returns 0 errorcode'
> > >       lines = [s for s in lines if lines != 'conftest.c:']
> > >       # in case -pie is always being passed to linker
> > >       lines = [s for s in lines if s.find('-pie being ignored. It is
> only
> > > used when linking a main executable') < 0]
> > >
> > >    Barry
> > >
> > >    You have (another of Conda's "take over the world my way" approach)
> > >
> > >    LDFLAGS_LD=-pie -headerpad_max_install_names -dead_strip_dylibs
> -rpath
> > > /Users/kongf/miniconda3/envs/testpetsc/lib
> > > -L/Users/kongf/miniconda3/envs/testpetsc/lib
> > >
> > > Executing: mpicc  -o
> > >
> /var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-pkset22y/config.setCompilers/conftest
> > >  -dynamiclib -single_module
> > >
> /var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-pkset22y/config.setCompilers/conftest.o
> > > Possible ERROR while running linker:
> > > stderr:
> > > ld: warning: -pie being ignored. It is only used when linking a main
> > > executable
> > >             Rejecting C linker flag -dynamiclib -single_module due to
> > >
> > > ld: warning: -pie being ignored. It is only used when linking a main
> > > executable
> > >
> > > This is the correct link command for the Mac but it is being rejected
> due
> > > to the warning message.
> > >
> > >
> > > On Mar 10, 2021, at 10:11 AM, Fande Kong <fdkong.jd at gmail.com> wrote:
> > >
> > > Thanks, Barry,
> > >
> > > It seems PETSc works fine with manually built compilers. We are pretty
> > > much sure that the issue is related to conda. Conda might introduce
> extra
> > > flags.
> > >
> > > We still need to make it work with conda because we deliver our package
> > > via conda for users.
> > >
> > >
> > > I unset all flags from conda, and got slightly different results this
> > > time.  The log was attached. Anyone could  explain the motivation that
> we
> > > try to build executable without a main function?
> > >
> > > Thanks,
> > >
> > > Fande
> > >
> > > Executing: mpicc -c -o
> > >
> /var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-pkset22y/config.setCompilers/conftest.o
> > >
> -I/var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-pkset22y/config.setCompilers
> > >  -fPIC
> > >
> /var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-pkset22y/config.setCompilers/conftest.c
> > >
> > > Successful compile:
> > > Source:
> > > #include "confdefs.h"
> > > #include "conffix.h"
> > > #include <stdio.h>
> > > int (*fprintf_ptr)(FILE*,const char*,...) = fprintf;
> > > void  foo(void){
> > >   fprintf_ptr(stdout,"hello");
> > >   return;
> > > }
> > > void bar(void){foo();}
> > > Running Executable WITHOUT threads to time it out
> > > Executing: mpicc  -o
> > >
> /var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-pkset22y/config.setCompilers/libconftest.so
> > >  -dynamic  -fPIC
> > >
> /var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-pkset22y/config.setCompilers/conftest.o
> > >
> > > Possible ERROR while running linker: exit code 1
> > > stderr:
> > > Undefined symbols for architecture x86_64:
> > >   "_main", referenced from:
> > >      implicit entry/start for main executable
> > > ld: symbol(s) not found for architecture x86_64
> > > clang-11: error: linker command failed with exit code 1 (use -v to see
> > > invocation)
> > >           Rejected C compiler flag -fPIC because it was not compatible
> > > with shared linker mpicc using flags ['-dynamic']
> > >
> > >
> > > On Mon, Mar 8, 2021 at 7:28 PM Barry Smith <bsmith at petsc.dev> wrote:
> > >
> > >>
> > >>   Fande,
> > >>
> > >>      I see you are using CONDA, this can cause issues since it sticks
> all
> > >> kinds of things into the environment. PETSc tries to remove some of
> them
> > >> but perhaps not enough. If you run printenv you will see all the mess
> it is
> > >> dumping in.
> > >>
> > >>     Can you trying the same build without CONDA environment?
> > >>
> > >>   Barry
> > >>
> > >>
> > >> On Mar 8, 2021, at 7:31 PM, Matthew Knepley <knepley at gmail.com>
> wrote:
> > >>
> > >> On Mon, Mar 8, 2021 at 8:23 PM Fande Kong <fdkong.jd at gmail.com>
> wrote:
> > >>
> > >>> Thanks Matthew,
> > >>>
> > >>> Hmm, we still have the same issue after shutting off all unknown
> flags.
> > >>>
> > >>
> > >> Oh, I was misinterpreting the error message:
> > >>
> > >>   ld: can't link with a main executable file
> > >>
> '/var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-6v1w4q4u/config.setCompilers/libconftest.dylib'
> > >>
> > >> So clang did not _actually_ make a shared library, it made an
> executable.
> > >> Did clang-11 change the options it uses to build a shared library?
> > >>
> > >> Satish, do we test with clang-11?
> > >>
> > >>   Thanks,
> > >>
> > >>       Matt
> > >>
> > >> Thanks,
> > >>>
> > >>> Fande
> > >>>
> > >>> On Mon, Mar 8, 2021 at 6:07 PM Matthew Knepley <knepley at gmail.com>
> > >>> wrote:
> > >>>
> > >>>> On Mon, Mar 8, 2021 at 7:55 PM Fande Kong <fdkong.jd at gmail.com>
> wrote:
> > >>>>
> > >>>>> Hi All,
> > >>>>>
> > >>>>> mpicc rejected "-fPIC". Anyone has a clue how to work around this
> > >>>>> issue?
> > >>>>>
> > >>>>
> > >>>> The failure is at the last step
> > >>>>
> > >>>> Executing: mpicc  -o
> > >>>>
> /var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-6v1w4q4u/config.setCompilers/conftest
> > >>>>   -fPIC
> > >>>>
> /var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-6v1w4q4u/config.setCompilers/conftest.o
> > >>>>
> -L/var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-6v1w4q4u/config.setCompilers
> > >>>> -lconftest
> > >>>> Possible ERROR while running linker: exit code 1
> > >>>> stderr:
> > >>>> ld: can't link with a main executable file
> > >>>>
> '/var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-6v1w4q4u/config.setCompilers/libconftest.dylib'
> > >>>> for architecture x86_64
> > >>>> clang-11: error: linker command failed with exit code 1 (use -v to
> see
> > >>>> invocation)
> > >>>>
> > >>>> but you have some flags stuck in which may or may not affect this. I
> > >>>> would try shutting them off:
> > >>>>
> > >>>> LDFLAGS_LD=-pie -headerpad_max_install_names -dead_strip_dylibs
> -rpath
> > >>>> /Users/kongf/miniconda3/envs/moose/lib
> > >>>> -L/Users/kongf/miniconda3/envs/moose/lib
> > >>>>
> > >>>> I cannot tell exactly why clang is failing because it does not
> report a
> > >>>> specific error.
> > >>>>
> > >>>>   Thanks,
> > >>>>
> > >>>>      Matt
> > >>>>
> > >>>> The log was attached.
> > >>>>>
> > >>>>> Thanks so much,
> > >>>>>
> > >>>>> Fande
> > >>>>>
> > >>>>
> > >>>>
> > >>>> --
> > >>>> What most experimenters take for granted before they begin their
> > >>>> experiments is infinitely more interesting than any results to
> which their
> > >>>> experiments lead.
> > >>>> -- Norbert Wiener
> > >>>>
> > >>>> https://www.cse.buffalo.edu/~knepley/
> > >>>> <http://www.cse.buffalo.edu/~knepley/>
> > >>>>
> > >>>
> > >>
> > >> --
> > >> What most experimenters take for granted before they begin their
> > >> experiments is infinitely more interesting than any results to which
> their
> > >> experiments lead.
> > >> -- Norbert Wiener
> > >>
> > >> https://www.cse.buffalo.edu/~knepley/
> > >> <http://www.cse.buffalo.edu/~knepley/>
> > >>
> > >>
> > >> <configure.log>
> > >
> > >
> > >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20210310/511fa6fa/attachment-0001.html>


More information about the petsc-users mailing list