brainboxdotcc / DPP

C++ Discord API Bot Library - D++ is Lightweight and scalable for small and huge bots!
https://dpp.dev/
Apache License 2.0
1.02k stars 156 forks source link

xmake dpp.lib(cluster.cpp.obj) : error LNK2019 #1007

Open FabriicioMelo opened 8 months ago

FabriicioMelo commented 8 months ago

Git commit reference: ffa2653f7504a701735ed23cfb2d503648253a96

Describe the bug: When trying to install dpp through xmake, I receive this error, which does not allow me to start the project.

To Reproduce: Steps to reproduce the behavior:

  1. Create a new xmake project
  2. Update the xmake.lua file by adding the dpp package, below the minimum configuration:
    
    add_rules("mode.debug", "mode.release")

add_requires("dpp")

target("test-bot") set_kind("binary") add_files("src/*.cpp")

add_packages("dpp")

5. Then build it `xmake build`

**Screenshots:**
![image](https://github.com/brainboxdotcc/DPP/assets/96056721/cbb80931-ec1f-4927-9f5f-d8ce0b64b33f)

**System Details:**
 - OS: Windows 11 Pro 64 bits 
 - Version: 22621.2715

**Adicional Info:**
I literally did what I was told on your website, here is the link: [https://dpp.dev/10.0.28/install-xmake.html](url)
Jaskowicz1 commented 8 months ago

@Mishura4 This is related to #980. Is this because it's not ran inside visual studio?

Mishura4 commented 8 months ago

I'll investigate. In the meantime you can add DPP_BYPASS_VERSION_CHECKING to the list of defines in your project to work around this

braindigitalis commented 8 months ago

you didn't link the windows sdk which contains the messageboxA function, this is required client side in the program which includes dpp.

FabriicioMelo commented 8 months ago

@braindigitalis Thanks to you, I managed to compile. I found how to link to the sdk. My xmake.lua file now looks like this:

add_rules("mode.debug", "mode.release")

add_requires("dpp")

target("test-bot")
    add_rules("win.sdk.application")

    set_kind("binary")
    add_files("src/*.cpp")

    add_packages("dpp")

You need to update this on your website.

Mishura4 commented 8 months ago

Please don't close this if it's not yet resolved on our end.

Thank you though for the solution, we'll look at this. There are potentially other solutions as well.

Jaskowicz1 commented 8 months ago

Maybe we could simply change the solution to patch Scary->MyHead? If the windows api is found (check with #ifdef) then we do the message box, otherwise we could do a fallback and just send the error log via std::cout or something.

Mishura4 commented 8 months ago

I have ideas, I'll take a look soon Very busy atm so probably next week

Jaskowicz1 commented 8 months ago

I have ideas, I'll take a look soon Very busy atm so probably next week

Okie dokie!

github-actions[bot] commented 6 months ago

This issue has had no activity and is being marked as stale. If you still wish to continue with this issue please comment to reopen it.

Mishura4 commented 6 months ago

i forgor

braindigitalis commented 5 months ago

did you forgor mor?

Jaskowicz1 commented 4 months ago

@Mishura4 Did you forgor even mor?

Nk125 commented 1 month ago

Why not including the pure user32.lib from windows?, I'm not so experienced handling with xmake but something like a pragma to import user32 in this lines. Also would be useful if TEXT() macro (defined in windows.h) is used in MessageBox to support unicode and non-unicode windows builds, avoiding compile issues in the future.

#ifdef _WIN32
#include <windows.h>
#pragma comment(lib, "user32.lib")

if constexpr (BuildType != build_type::universal && BuildType != expected) {
        MessageBox(
            nullptr,
            TEXT(
                "Mismatched Debug/Release ...\n"
                "..."
            ),
            TEXT("D++ Debug/Release mismatch"),
            MB_OK | MB_ICONERROR
        );
        // ...
}
#endif
// ...

Useful links: MessageBoxA requirements MessageBoxW requirements