[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 10:11:54 CST 2021


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/>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20210310/d37018ea/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: configure.log
Type: application/octet-stream
Size: 212451 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20210310/d37018ea/attachment-0001.obj>


More information about the petsc-users mailing list