DPP icon indicating copy to clipboard operation
DPP copied to clipboard

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

Open FabriicioMelo opened this issue 1 year ago • 13 comments

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")
  1. Then build it xmake build

Screenshots: image

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

FabriicioMelo avatar Nov 18 '23 16:11 FabriicioMelo

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

Jaskowicz1 avatar Nov 18 '23 16:11 Jaskowicz1

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

Mishura4 avatar Nov 18 '23 17:11 Mishura4

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

braindigitalis avatar Nov 18 '23 18:11 braindigitalis

@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.

FabriicioMelo avatar Nov 18 '23 20:11 FabriicioMelo

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.

Mishura4 avatar Nov 18 '23 20:11 Mishura4

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.

Jaskowicz1 avatar Nov 22 '23 10:11 Jaskowicz1

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

Mishura4 avatar Nov 22 '23 14:11 Mishura4

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

Okie dokie!

Jaskowicz1 avatar Nov 24 '23 13:11 Jaskowicz1

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.

github-actions[bot] avatar Jan 24 '24 02:01 github-actions[bot]

i forgor

Mishura4 avatar Jan 24 '24 02:01 Mishura4

did you forgor mor?

braindigitalis avatar Feb 19 '24 10:02 braindigitalis

@Mishura4 Did you forgor even mor?

Jaskowicz1 avatar Apr 03 '24 12:04 Jaskowicz1

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

Nk125 avatar Jun 30 '24 17:06 Nk125