# Linking a dll to an other dll with DllMain

**URL:** https://discourse.cmake.org/t/linking-a-dll-to-an-other-dll-with-dllmain/13653
**Category:** Code
**Tags:** os:windows
**Created:** [February 28, 2025, 3:10pm UTC](https://discourse.cmake.org/t/linking-a-dll-to-an-other-dll-with-dllmain/13653 "2025-02-28T15:10:27Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![bcafarth](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/b/51bf81/32.png) [@bcafarth](https://discourse.cmake.org/u/bcafarth)
#### Post date: [February 28, 2025, 3:10pm UTC](https://discourse.cmake.org/t/linking-a-dll-to-an-other-dll-with-dllmain/13653/1 "2025-02-28T15:10:27Z")

</div>

Hello,  
I have a main, and I can link a library (Called DynLib) to that main, dynamically (SHARED). Now I have another library (Called SubDynLib), that i want to link to DynLib. If I build SubDynLib alone, and then put the SubDynLib.lib file in the target\_link\_directories, it works. If I want build SubDynLib togheter with DynLib I receive the error

Severity Code Description Project File Line Suppression State Details  
Error LNK2005 DllMain already defined in DynLib.cpp.obj

What am I doing wrong?

DYNLIB

cmake\_minimum\_required (VERSION 3.16)

project (“DYNLIB” VERSION 1.0.0)

add\_library(DYNLIB SHARED)

target\_sources(DYNLIB  
PUBLIC  
DynLib.h  
DynLib.cpp  
DynLib.def  
)

target\_include\_directories(DYNLIB  
INTERFACE  
${CMAKE\_CURRENT\_SOURCE\_DIR}  
PUBLIC  
../SubDynLib  
)

target\_link\_libraries(DYNLIB  
PRIVATE  
SUBDYNLIB  
)

install(TARGETS DYNLIB DESTINATION ${CMAKE\_BINARY\_DIR}/CMakeProjectDynLinkTestWin)

SUBDYNLIB

cmake\_minimum\_required (VERSION 3.16)

project (“SUBDYNLIB” VERSION 1.0.0)

add\_library(SUBDYNLIB SHARED)

target\_sources(SUBDYNLIB  
PUBLIC  
SubDynLib.h  
SubDynLib.cpp  
PRIVATE  
SubDynLib.def  
)

target\_include\_directories(SUBDYNLIB  
INTERFACE  
${CMAKE\_CURRENT\_SOURCE\_DIR}  
)

install(TARGETS SUBDYNLIB DESTINATION ${CMAKE\_BINARY\_DIR}/CMakeProjectDynLinkTestWin)

MAIN EXEC

cmake\_minimum\_required (VERSION 3.16)

add\_executable (CMakeProjectDynLinkTestWin “CMakeProjectDynLinkTestWin.cpp” “CMakeProjectDynLinkTestWin.h”)

target\_compile\_features(CMakeProjectDynLinkTestWin PUBLIC cxx\_std\_11)

set(CMAKE\_SYSTEM\_VERSION “10.0.19041.0”)  
set(CMAKE\_GENERATOR\_TOOLSET “v141”)  
set(CMAKE\_VS\_PLATFORM\_TOOLSET “v141”)

target\_compile\_options(CMakeProjectDynLinkTestWin PUBLIC /Zp1)  
target\_compile\_definitions(CMakeProjectDynLinkTestWin PUBLIC WINDOWS\_IGNORE\_PACKING\_MISMATCH)

target\_link\_libraries(CMakeProjectDynLinkTestWin  
PRIVATE  
DYNLIB  
)

ROOT CMAKE

# CMakeList.txt : Top-level CMake project file, do global configuration

# and include sub-projects here.

# 

cmake\_minimum\_required (VERSION 3.16)

if (POLICY CMP0022)  
cmake\_policy(SET CMP0022 NEW)  
endif()

project (“CMakeProjectDynLinkTestWin”)  
add\_subdirectory (“CMakeProjectDynLinkTestWin”)

# Include sub-projects.

add\_subdirectory (“SubDynLib”)  
add\_subdirectory (“DynLib”)

Any help is appreciated

Thanks

BC
