Skip to content

Unclear how to create shared dynamic libraries on Windows #103

Description

@dbischof90

Hi,

I'm currently trying to wrap PRIMA into a C# interface and, well, building is already an issue. :)
Judging from the CMakeFiles, I thought I'd only have to switch on BUILD_SHARED_LIBS but maybe I'm missing something.

My output right now is

PS C:\MyWS\prima> cmake -S . -B build -DCMAKE_INSTALL_PREFIX=install -DBUILD_SHARED_LIBS=1
-- Building for: Visual Studio 16 2019
-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22621.
-- The Fortran compiler identification is Intel 2021.10.0.20230609
-- Detecting Fortran compiler ABI info
-- Detecting Fortran compiler ABI info - done
-- Determine Intel Fortran Compiler Implicit Link Path
-- Determine Intel Fortran Compiler Implicit Link Path - done
-- Check for working Fortran compiler: C:/Program Files (x86)/Intel/oneAPI/compiler/2023.2.1/windows/bin/intel64/ifort.exe - skipped
-- The C compiler identification is MSVC 19.29.30151.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Configuring done (15.4s)
-- Generating done (0.1s)
-- Build files have been written to: C:/MyWS/prima/build
PS C:\MyWS\prima> cmake --build build --target install

Microsoft Visual Studio 2019 Version 16.11.28.
Copyright (C) Microsoft Corp. Alle Rechte vorbehalten.
Erstellen gestartet...
1>------ Erstellen gestartet: Projekt: ZERO_CHECK, Konfiguration: Debug x64 ------
1>1>Checking Build System
2>------ Erstellen gestartet: Projekt: primaf, Konfiguration: Debug x64 ------
Compiling with Intel® Fortran Compiler Classic 2021.10.0 [Intel(R) 64]...
consts.F90
pintrf.f90
huge.F90
infos.f90
debug.F90
inf.F90
memory.F90
redrho.f90
infnan.F90
string.f90
ratio.f90
linalg.f90
history.f90
selectx.f90
checkexit.f90
preproc.f90
fprint.f90
powalg.f90
evaluate.f90
trustregion.f90
univar.f90
trustregion.f90
message.f90
geometry.f90
trustregion.f90
trustregion.f90
xinbd.f90
update.f90
update.f90
shiftbase.f90
getact.f90
update.f90
geometry.f90
update.f90
initialize.f90
geometry.f90
initialize.f90
geometry.f90
uobyqb.f90
rescue.f90
update.f90
geometry.f90
trustregion.f90
initialize.f90
initialize.f90
initialize.f90
uobyqa.f90
lincob.f90
lincoa.f90
cobylb.f90
bobyqb.f90
newuob.f90
cobyla.f90
bobyqa.f90
newuoa.f90
Performing Pre-Link Event...
Compiling manifest to resources...
Microsoft (R) Windows (R) Resource Compiler Version 10.0.10011.16384
Copyright (C) Microsoft Corporation.  All rights reserved.
Linking...
Microsoft (R) Incremental Linker Version 14.29.30151.0
Copyright (C) Microsoft Corporation.  All rights reserved.
/OUT:C:\MyWS\prima\build\bin\Debug\primaf.dll
/VERSION:0.0
/DEF:C:\MyWS\prima\fortran\primaf-Intel.def
/MANIFEST
/MANIFESTFILE:primaf.dir\Debug\primaf.dll.intermediate.manifest
"/MANIFESTUAC:level='asInvoker' uiAccess='false'"
/DEBUG
/PDB:C:\MyWS\prima\build\bin\Debug\primaf.pdb
/IMPLIB:C:\MyWS\prima\build\fortran\Debug\primaf.lib
/DLL
user32.lib
/machine:x64
/debug
/INCREMENTAL
primaf.dir\Debug\consts.obj
primaf.dir\Debug\pintrf.obj
primaf.dir\Debug\huge.obj
primaf.dir\Debug\infos.obj
primaf.dir\Debug\debug.obj
primaf.dir\Debug\inf.obj
primaf.dir\Debug\memory.obj
primaf.dir\Debug\redrho.obj
primaf.dir\Debug\infnan.obj
primaf.dir\Debug\string.obj
primaf.dir\Debug\ratio.obj
primaf.dir\Debug\linalg.obj
primaf.dir\Debug\history.obj
primaf.dir\Debug\selectx.obj
primaf.dir\Debug\checkexit.obj
primaf.dir\Debug\preproc.obj
primaf.dir\Debug\fprint.obj
primaf.dir\Debug\powalg.obj
primaf.dir\Debug\evaluate.obj
primaf.dir\Debug/uobyqa/trustregion.f90.obj
primaf.dir\Debug\univar.obj
primaf.dir\Debug/bobyqa/trustregion.f90.obj
primaf.dir\Debug\message.obj
primaf.dir\Debug/cobyla/geometry.f90.obj
primaf.dir\Debug/newuoa/trustregion.f90.obj
primaf.dir\Debug/cobyla/trustregion.f90.obj
primaf.dir\Debug\xinbd.obj
primaf.dir\Debug/uobyqa/update.f90.obj
primaf.dir\Debug/cobyla/update.f90.obj
primaf.dir\Debug\shiftbase.obj
primaf.dir\Debug\getact.obj
primaf.dir\Debug/newuoa/update.f90.obj
primaf.dir\Debug/uobyqa/geometry.f90.obj
primaf.dir\Debug/bobyqa/update.f90.obj
primaf.dir\Debug/cobyla/initialize.f90.obj
primaf.dir\Debug/bobyqa/geometry.f90.obj
primaf.dir\Debug/uobyqa/initialize.f90.obj
primaf.dir\Debug/lincoa/geometry.f90.obj
primaf.dir\Debug\uobyqb.obj
primaf.dir\Debug\rescue.obj
primaf.dir\Debug/lincoa/update.f90.obj
primaf.dir\Debug/newuoa/geometry.f90.obj
primaf.dir\Debug/lincoa/trustregion.f90.obj
primaf.dir\Debug/lincoa/initialize.f90.obj
primaf.dir\Debug/newuoa/initialize.f90.obj
primaf.dir\Debug/bobyqa/initialize.f90.obj
primaf.dir\Debug\uobyqa.obj
primaf.dir\Debug\lincob.obj
primaf.dir\Debug\lincoa.obj
primaf.dir\Debug\cobylb.obj
primaf.dir\Debug\bobyqb.obj
primaf.dir\Debug\newuob.obj
primaf.dir\Debug\cobyla.obj
primaf.dir\Debug\bobyqa.obj
primaf.dir\Debug\newuoa.obj
primaf.dir\Debug\primaf.dll.embed.manifest.res
   Bibliothek "C:\MyWS\prima\build\fortran\Debug\primaf.lib" und Objekt "C:\MyWS\prima\build\fortran\Debug\primaf.exp" werden erstellt.
Embedding manifest...
Microsoft (R) Manifest Tool
Copyright (c) Microsoft Corporation.
All rights reserved.

Build log written to  "file://C:/MyWS/prima/build/fortran/primaf.dir/Debug/BuildLog.htm"
primaf - 0 error(s), 0 warning(s)
3>------ Erstellen gestartet: Projekt: primac, Konfiguration: Debug x64 ------
3>Building Custom Rule C:/MyWS/prima/c/CMakeLists.txt
3>cl : befehlszeile warning D9002: Unbekannte Option "/fpp" wird ignoriert.
3>cl : befehlszeile warning D9002: Unbekannte Option "/libs:dll" wird ignoriert.
3>cl : befehlszeile warning D9002: Unbekannte Option "/threads" wird ignoriert.
3>cl : befehlszeile warning D9002: Unbekannte Option "/heap-arrays" wird ignoriert.
3>cl : befehlszeile warning D9002: Unbekannte Option "/assume:recursion" wird ignoriert.
3>cl : befehlszeile warning D9002: Unbekannte Option "/debug:full" wird ignoriert.
3>cl : befehlszeile warning D9002: Unbekannte Option "/dbglibs" wird ignoriert.
3>prima.c
3>primac.def : error LNK2001: Nicht aufgelöstes externes Symbol "bobyqa_c".
3>primac.def : error LNK2001: Nicht aufgelöstes externes Symbol "cobyla_c".
3>primac.def : error LNK2001: Nicht aufgelöstes externes Symbol "lincoa_c".
3>primac.def : error LNK2001: Nicht aufgelöstes externes Symbol "newuoa_c".
3>primac.def : error LNK2001: Nicht aufgelöstes externes Symbol "uobyqa_c".
3>C:/MyWS/prima/build/c/Debug/primac.lib : fatal error LNK1120: 5 nicht aufgelöste Externe
3>Die Erstellung des Projekts "primac.vcxproj" ist abgeschlossen -- FEHLER.
4>------ Erstellen gestartet: Projekt: ALL_BUILD, Konfiguration: Debug x64 ------
4>Building Custom Rule C:/MyWS/prima/CMakeLists.txt
5>------ Erstellen gestartet: Projekt: INSTALL, Konfiguration: Debug x64 ------
5>1>
5>-- Install configuration: "Debug"
5>-- Installing: C:/MyWS/prima/install/lib/primaf.lib
5>-- Installing: C:/MyWS/prima/install/bin/primaf.dll
5>-- Installing: C:/MyWS/prima/install/bin/primac.dll
5>-- Installing: C:/MyWS/prima/install/lib/cmake/prima/prima-targets.cmake
5>-- Installing: C:/MyWS/prima/install/lib/cmake/prima/prima-targets-debug.cmake
5>-- Installing: C:/MyWS/prima/install/lib/cmake/prima/prima-config.cmake
5>-- Installing: C:/MyWS/prima/install/lib/cmake/prima/prima-config-version.cmake
5>-- Installing: C:/MyWS/prima/install/include/prima/mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/bobyqa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/bobyqb_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/checkexit_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/cobyla_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/cobylb_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/consts_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/debug_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/evaluate_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/fprint_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/geometry_bobyqa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/geometry_cobyla_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/geometry_lincoa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/geometry_newuoa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/geometry_uobyqa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/getact_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/history_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/huge_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/infnan_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/infos_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/inf_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/initialize_bobyqa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/initialize_cobyla_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/initialize_lincoa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/initialize_newuoa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/initialize_uobyqa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/linalg_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/lincoa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/lincob_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/memory_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/message_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/newuoa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/newuob_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/pintrf_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/powalg_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/preproc_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/ratio_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/redrho_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/rescue_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/selectx_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/shiftbase_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/string_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/trustregion_bobyqa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/trustregion_cobyla_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/trustregion_lincoa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/trustregion_newuoa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/trustregion_uobyqa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/univar_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/uobyqa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/uobyqb_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/update_bobyqa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/update_cobyla_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/update_lincoa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/update_newuoa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/update_uobyqa_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/mod/Debug/xinbd_mod.mod
5>-- Installing: C:/MyWS/prima/install/include/prima/prima.h
========== Erstellen: 4 erfolgreich, 1 fehlerhaft, 0 aktuell, 0 übersprungen ==========

I've seen in #28 that this was discussed already, I suspect that I'm just not passing the correct build flags. Any ideas?

Metadata

Metadata

Assignees

No one assigned

    Labels

    ciIssues related to CIcmakeIssues related to CMakegood first issueGood for newcomershelp wantedExtra attention is neededtests neededIssues that necessitate or motivate new testswindowsIssues related to Windows

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions