[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 13:43:38 CST 2021
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/b789763a/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: configure.log
Type: application/octet-stream
Size: 236796 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20210310/b789763a/attachment-0001.obj>
More information about the petsc-users
mailing list