[Paraview-developers] Linker error building Fortran90FullExample

thomasblome at startmail.com thomasblome at startmail.com
Sat Nov 19 10:09:29 EST 2016


Hi Andy,

I ran ctest from the windows cmd, but couldn't make sense of the 
output. Anyhow, I guess the segmentation fault was due to a wrong 
declaration of the rank 3 Fortran array of type complex in the 
procedure interface I provided for the C++ function addfield(). I 
changed it to be type(c_ptr) as the function expects a double pointer. 
Afterwards the test ran successfully.

Nevertheless, it remains a mystery to me how the reference to the rank 
3 array is properly handled in addfield(), as Fortran and C++ use 
different memory layouts for multidimensional arrays; I guess it's 
still not correct, even though there is no segmentation fault shown.

I set the input of EnableLiveVisualization() in coproc.py to True and 
tried to visualize the simulation, but its duration is too short - the 
test finishes already after a few seconds. Only once I could sneak a 
peak to the cube in Paraview, but I got following error message (in 
Paraview) right before the simulation stopped:

ERROR: In 
C:\Kitware\ParaView-v5.1.2\VTK\Parallel\Core\vtkSocketCommunicator.cxx, 
line 809
vtkSocketCommunicator (000001E68C21B360): Could not receive tag. 1

Best,
Thomas


 
Am Sonntag, 13. November 2016 14:40 schrieb Andy Bauer 
<andy.bauer at kitware.com>:
 
> Hi Thomas,
>  
> Can you run ctest -V to get verbose output out of the run? That may 
> shed some light on what the issue is. My guess is that it's not 
> finding the coproc.py script. Also, the verbose output for ctest will 
> show you how you can run the test manually which may be useful.
>  
> Cheers,
> Andy
>  
> On Fri, Nov 11, 2016 at 2:50 PM, <thomasblome at startmail.com> wrote:
>> To resolve the references inclusion of header files 
>> "CPythonAdaptorAPI.h" and "CAdaptorAPI.h" in FECxxAdaptor.cxx was 
>> required, as they declare the missing functions.
>> Afterwards, I provided the corresponding procedure interfaces in the 
>> Fortran files and finally got through the static linking stage.
>> 
>> Now, when I start the RUN_TESTS project, the 
>> Fortran90FullExampleTest fails due to a segmentation fault:
>> 
>> 1/1 Test #1: Fortran90FullExampleTest .........***Exception: 
>> SegFault  8.48 sec
>> 1>
>> 1>  0% tests passed, 1 tests failed out of 1
>> 1>
>> 1>  Label Time Summary:
>> 1>  CATALYST    =   8.48 sec (1 test)
>> 1>  PARAVIEW    =   8.48 sec (1 test)
>> 1>
>> 1>  Total Test time (real) =   8.48 sec
>> 1>
>> 1>  The following tests FAILED:
>> 1>        1 - Fortran90FullExampleTest (SEGFAULT)
>> 1>  Errors while running CTest
>> 1>C:\Program Files 
>> (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): 
>> error MSB3073: The command "setlocal
>> 1>C:\Program Files 
>> (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): 
>> error MSB3073: C:\cmake\bin\ctest.exe --force-new-ctest-process -C 
>> Debug
>> 1>C:\Program Files 
>> (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): 
>> error MSB3073: if %errorlevel% neq 0 goto :cmEnd
>> 1>C:\Program Files 
>> (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): 
>> error MSB3073: :cmEnd
>> 1>C:\Program Files 
>> (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): 
>> error MSB3073: endlocal & call :cmErrorLevel %errorlevel% & goto 
>> :cmDone
>> 1>C:\Program Files 
>> (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): 
>> error MSB3073: :cmErrorLevel
>> 1>C:\Program Files 
>> (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): 
>> error MSB3073: exit /b %1
>> 1>C:\Program Files 
>> (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): 
>> error MSB3073: :cmDone
>> 1>C:\Program Files 
>> (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): 
>> error MSB3073: if %errorlevel% neq 0 goto :VCEnd
>> 1>C:\Program Files 
>> (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(133,5): 
>> error MSB3073: :VCEnd" exited with code 8.
>> 
>> Does anybody know how to solve this?
>> 
>> Best,
>> Thomas
>>  
>> Am Donnerstag, 10. November 2016 19:10 schrieb 
>> thomasblome at startmail.com:
>>  
>>> Hi Andy,
>>> 
>>> The linker error concerning the missing main method was due to a 
>>> wrong solution setup of the Fortran90FullExample in VS.
>>> The CMakeLists file provided generates only one single (C++) 
>>> project in VS, which means all .f90 files will be ignored by the 
>>> compiler (it's impossible to have a single Fortran/C++ mixed 
>>> language project in VS).
>>> To solve this I had to configure the CMakeLists file to create a 
>>> library from FECxxAdaptor.cxx and link it with the 
>>> Fortran90FullExample.
>>> 
>>> Other linker & compiler errors occurred with regards to mpi:
>>> 1) the target_link_libraries command  in the CMakeLists file links 
>>> ${MPI_Fortran_LIBRARIES} to the fortran project,
>>> but it forgets to link with msmpifec.lib (see also: 
>>> http://public.kitware.com/pipermail/cmake/2016-February/062861.html).
>>> 2) The specification of an include directory (containing header 
>>> mpifptr.h) was missing.
>>> 
>>> Another problem arose when it comes to the the by hand name 
>>> mangling for fortran in FECxxAdaptor.cxx.
>>> To get rid of that I introduced function interfaces in the 
>>> FEFortranAdaptor.f90 file and now it works independently of the 
>>> Fortran compiler used.
>>> 
>>> Now, there are only five remaining linker errors as shown below:
>>> 
>>> LNK2019: unresolved external symbol COPROCESS referenced in 
>>> function TCP_mp_TESTCOPROCESSOR        FEFortranAdaptor.obj        
>>> LNK2019: unresolved external symbol COPROCESSORINITIALIZEWITHPYTHON 
>>> referenced in function MAIN__        FEDriver.obj        
>>> LNK2019: unresolved external symbol COPROCESSORFINALIZE referenced 
>>> in function MAIN__        FEDriver.obj        
>>> LNK2019: unresolved external symbol NEEDTOCREATEGRID referenced in 
>>> function TCP_mp_TESTCOPROCESSOR        FEFortranAdaptor.obj        
>>> LNK2019: unresolved external symbol REQUESTDATADESCRIPTION 
>>> referenced in function TCP_mp_TESTCOPROCESSOR       
>>>  FEFortranAdaptor.obj   
>>> 
>>> In the ParaViewCatalystUsersGuide_v2 the missing symbols appear to 
>>> be declared in CAdaptorAPI.h and CPythonAdaptorAPI.h (but 
>>> NEEDTOCREATEGRID),
>>> but I can't just include them in the Fortran code.
>>> 
>>> Can you tell me how to resolve those missing references?
>>> 
>>> Best,
>>> Thomas
>>> 
>>>  
>>> Am Mittwoch, 26. Oktober 2016 18:47 schrieb Andy Bauer <andy.bauer at kitware.com>:
>>>  
>>>> Hi Thomas,
>>>>  
>>>> I really don't know about this. Do you get the same behavior if 
>>>> you don't link with Catalyst? Can you create a simple 
>>>> helloworld.f90 example that works?
>>>>  
>>>> Best,
>>>> Andy
>>>>  
>>>> On Wed, Oct 26, 2016 at 3:39 AM, <thomasblome at startmail.com> 
>>>> wrote:
>>>>> Hi Andy,
>>>>> 
>>>>> I have changed both lines from coproc to main, but the error 
>>>>> message remains the same.
>>>>> 
>>>>> Best,
>>>>> Thomas
>>>>>  
>>>>> Am Montag, 24. Oktober 2016 22:00 schrieb Andy Bauer <andy.bauer at kitware.com>:
>>>>>  
>>>>>> Hi Thomas,
>>>>>>  
>>>>>> If you change from coproc to main in the "program" and "end 
>>>>>> program" lines in FEDriver.f90 does that fix the problem?
>>>>>>  
>>>>>> I'm working on a fix for this but don't have access to any MSVS 
>>>>>> compilers.
>>>>>>  
>>>>>> Thanks,
>>>>>> Andy
>>>>>>  
>>>>>> On Sat, Oct 22, 2016 at 1:46 PM, <thomasblome at startmail.com> 
>>>>>> wrote:
>>>>>>> Hello,
>>>>>>> 
>>>>>>> I'm trying to compile the Fortran90FullExample using MSVS 
>>>>>>> (Intel Fortran Compiler 2017 and Visual C++ 2015 compiler).
>>>>>>> Doing so I'm getting following linker error:
>>>>>>> 
>>>>>>> Error    LNK2019    unresolved external symbol main referenced 
>>>>>>> in function "int __cdecl __scrt_common_main_seh(void)" 
>>>>>>> (?__scrt_common_main_seh@@YAHXZ)    Fortran90FullExample.
>>>>>>> 
>>>>>>> Obviously, the source code doesn't contain a main method at 
>>>>>>> all, since the entry point is given by the fortran program in 
>>>>>>> file 'FEDriver.f90'.
>>>>>>> Nevertheless, I guess the compiler internally creates a main 
>>>>>>> method, and the linker cannot resolve the reference due to a 
>>>>>>> name mangling problem, as there are different compilers 
>>>>>>> involved. But I'm not quite sure about that, nor how to solve 
>>>>>>> it, at that matter.
>>>>>>> 
>>>>>>> Can you give me a hint how to solve that problem?
>>>>>>> 
>>>>>>> Kind regards,
>>>>>>> Thomas
>>>>>>> _______________________________________________
>>>>>>> Powered by www.kitware.com <http://www.kitware.com>
>>>>>>> 
>>>>>>> Visit other Kitware open-source projects at 
>>>>>>> http://www.kitware.com/opensource/opensource.html
>>>>>>> 
>>>>>>> Search the list archives at: 
>>>>>>> http://markmail.org/search/?q=Paraview-developers
>>>>>>> 
>>>>>>> Follow this link to subscribe/unsubscribe:
>>>>>>> http://public.kitware.com/mailman/listinfo/paraview-developers
>>>>>>>  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/paraview-developers/attachments/20161119/ad019732/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 7F53DEC77F67D0E0.asc
Type: application/pgp-keys
Size: 3082 bytes
Desc: OpenPGP public keys
URL: <http://public.kitware.com/pipermail/paraview-developers/attachments/20161119/ad019732/attachment.key>


More information about the Paraview-developers mailing list