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

Satish Balay balay at mcs.anl.gov
Wed Mar 10 10:34:19 CST 2021


On Wed, 10 Mar 2021, Fande Kong 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?

Its attempting to build a shared library - which shouldn't have a main.

However - the primary issue is:

>>>>>
Executing: mpicc  -o /var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-pkset22y/config.setCompilers/conftest    /var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-pkset22y/config.setCompilers/conftest.o  -L/var/folders/tv/ljnkj46x3nq45cp9tbkc000c0000gn/T/petsc-pkset22y/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-pkset22y/config.setCompilers/libconftest.dylib' for architecture x86_64
clang-11: error: linker command failed with exit code 1 (use -v to see invocation)
<<<

Here its built a .dylib - and attempting to use it. But the compiler gives the above error.

Can you build with conda compilers - but outside conda env? It appears to have:

AS=/Users/kongf/miniconda3/envs/testpetsc/bin/x86_64-apple-darwin13.4.0-as
AR=/Users/kongf/miniconda3/envs/testpetsc/bin/x86_64-apple-darwin13.4.0-ar
CXX_FOR_BUILD=/Users/kongf/miniconda3/envs/testpetsc/bin/x86_64-apple-darwin13.4.0-clang++
INSTALL_NAME_TOOL=/Users/kongf/miniconda3/envs/testpetsc/bin/x86_64-apple-darwin13.4.0-install_name_tool
CC_FOR_BUILD=/Users/kongf/miniconda3/envs/testpetsc/bin/x86_64-apple-darwin13.4.0-clang
FC_FOR_BUILD=/Users/kongf/miniconda3/envs/testpetsc/bin/-gfortran
LD=/Users/kongf/miniconda3/envs/testpetsc/bin/x86_64-apple-darwin13.4.0-ld

Don't know if any one of them is making a difference.

Also you might want to comment out "self.executeTest(self.resetEnvCompilers)" in setCompilers.py to see if its making a difference [same with self.checkEnvCompilers?]

Satish


> 
> 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/>
> >
> >
> >
> 



More information about the petsc-users mailing list