skip to Main Content

I am Programming an App with visual studio 2022, in c++, x64 with libraries installed with help of vcpkg. They are dynamic link libraries.

I want to use my App as static, to run it in another PC without need to install frameworks, or make an installer, or other dependencies, just one .exe and that´s it. Maybe is called "Portable"?

My AI asistent says that I should first change to Release, and change Code generation option to "/MT"

I do it and I started to experiment Linking problems, of course because my libraries are configured as dynamic. But…

Is that exactly the problem that I have in this message?, or do I have more? I can really not understand the Message.

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2001 unresolved external symbol "__declspec(dllimport) public: class std::locale __cdecl std::basic_streambuf<char,struct std::char_traits<char> >::getloc(void)const " (__imp_?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEBA?AVlocale@2@XZ)    WxWidgets_Structured    C:UsersJuansourcereposWxWidgets_StructuredConfigManager.obj   1   
Error   LNK1120 1 unresolved externals  WxWidgets_Structured    C:UsersJuansourcereposWxWidgets_Structuredx64ReleaseWxWidgets_Structured.exe    1   

2

Answers


  1. Chosen as BEST ANSWER

    I did install all the libraries:

    • nlohman-json
    • vtk
    • wxwidgets
    • open62541

    in his static version sucessfully using:

    ./vcpkg install <packet>:x64-windows-static
    ./vcpkg integrate install
    

    new start of visual studio, and changing to "/MT"

    but.. Exactly the same problem is happening...

    how can I continue?

    Should I eliminate the references to .dll in properties and addin a link to the static libraries? Or is vcpkg doing it automatically.

    If needed, how can I do it?


  2. As soon as you want to use something that you get through a DLL you cannot build a statically built program. Full stop.

    Possible ways:

    • most libraries come in either dynamic or static libraries: verify (twice) whether the packages that you use are provided also as static libraries

    • there are a number of one file packaging program tools. For example py2exe or pyinstaller take a Python interpretor, one or more scripts and the required libraries, pack everything into a kind of zip archive along with a bootstrap that unpacks everything into a temporary folder and then launch the Python interpretor with its main script. You could probably adapt a self-extracting zip file to immediately launch your program after extracting the archive containing the program and the required DLL.

      But that actually boils down to first building an installer and then have the installer immediately run the code and clean the installation after use. You could search whether InnoSetup of NSIS can be tweaked to obtain that…

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search