From a1d8935b2b2449e07767f0bd42a54aaa755f0f67 Mon Sep 17 00:00:00 2001 From: LoRd_MuldeR Date: Sat, 3 Dec 2022 02:21:53 +0100 Subject: [PATCH] Added DllMain() function to Windows "shared" library (DLL). --- config.mk | 2 +- libhashset/Makefile | 6 +++--- libhashset/libhashset.vcxproj | 1 + libhashset/libhashset.vcxproj.filters | 3 +++ libhashset/src/dll_main.c | 29 +++++++++++++++++++++++++++ 5 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 libhashset/src/dll_main.c diff --git a/config.mk b/config.mk index f16d87e..3b7bf53 100644 --- a/config.mk +++ b/config.mk @@ -24,7 +24,7 @@ endif endif ifeq ($(firstword $(filter %-mingw32 %-cygwin,$(DUMPMACHINE))),) - DLL_LDFLAGS = -fPIC -shared + DLL_LDFLAGS = -shared DLL_SUFFIX := .so else DLL_LDFLAGS = -shared -Wl,--out-implib,$@.a diff --git a/libhashset/Makefile b/libhashset/Makefile index 6106539..6f20115 100644 --- a/libhashset/Makefile +++ b/libhashset/Makefile @@ -1,6 +1,6 @@ include ../config.mk -CFLAGS = -std=c99 -D_DEFAULT_SOURCE -Wpedantic -Iinclude $(XCFLAGS) +CFLAGS = -std=c99 -D_DEFAULT_SOURCE -Wpedantic -Iinclude -fPIC $(XCFLAGS) SRC_PATH := src OBJ_PATH := obj @@ -21,9 +21,9 @@ test: build build: $(ALL_PATH) $(LIB_FILE) $(DLL_FILE) $(LIB_FILE): $(OBJ_FILE) - $(AR) rcs $@ $^ + $(AR) rcs $@ $(filter-out $(OBJ_PATH)/dll%,$^) -$(DLL_FILE): $(SRC_FILE) +$(DLL_FILE): $(OBJ_FILE) $(CC) $(CFLAGS) $(DLL_LDFLAGS) -o $@ $^ $(OBJ_FILE): diff --git a/libhashset/libhashset.vcxproj b/libhashset/libhashset.vcxproj index 189fdfc..f49a5c4 100644 --- a/libhashset/libhashset.vcxproj +++ b/libhashset/libhashset.vcxproj @@ -46,6 +46,7 @@ + diff --git a/libhashset/libhashset.vcxproj.filters b/libhashset/libhashset.vcxproj.filters index 1be189e..335644b 100644 --- a/libhashset/libhashset.vcxproj.filters +++ b/libhashset/libhashset.vcxproj.filters @@ -53,5 +53,8 @@ Source Files + + Source Files + \ No newline at end of file diff --git a/libhashset/src/dll_main.c b/libhashset/src/dll_main.c new file mode 100644 index 0000000..7fa6475 --- /dev/null +++ b/libhashset/src/dll_main.c @@ -0,0 +1,29 @@ +/******************************************************************************/ +/* HashSet for C99, by LoRd_MuldeR */ +/* This work has been released under the CC0 1.0 Universal license! */ +/******************************************************************************/ + +#if defined(_WIN32) + +#define WIN32_LEAN_AND_MEAN 1 +#include + +BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + +#elif defined(__GNUC__) + +void __attribute__((constructor)) libhashet_init(void) { /*noop*/ } +void __attribute__((destructor)) libhashet_exit(void) { /*noop*/ } + +#endif