Skip to content

Fixed: sol2 linking error due to incorrect usage in CMake #36

Description

@PsychicStrawberry

Summary:
The build was previously failing with this error:

LINK : fatal error LNK1181: cannot open input file 'sol2.lib'

This was due to sol2 (a header-only library) being incorrectly added to target_link_libraries.

Fix:

Added find_package(sol2 CONFIG REQUIRED)

Removed sol2 from target_link_libraries

Included sol2 properly with target_include_directories

Result:
Build now succeeds, and sol2 is correctly treated as a header-only dependency.

--CMakeList.txt Fixed--

cmake_minimum_required(VERSION 3.7...3.27)

if(${CMAKE_VERSION} VERSION_LESS 3.12)
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
endif()

project(LuaBackendHook LANGUAGES CXX)

set(PROGRAM_VERSION "" CACHE STRING "Program version override")

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

Statically link CRT

set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$CONFIG:Debug:Debug>")

find_package(ztd.text CONFIG REQUIRED)
find_package(ztd.cuneicode CONFIG REQUIRED)
find_package(sol2 CONFIG REQUIRED)

find_package(wil CONFIG REQUIRED)

find_package(PkgConfig REQUIRED)
pkg_check_modules(tomlplusplus REQUIRED IMPORTED_TARGET tomlplusplus)

find_package(sol2 CONFIG REQUIRED)
find_package(Lua REQUIRED)

find_library(DISCORD_RPC_LIBRARY_DEBUG discord-rpc
PATHS ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib
NO_DEFAULT_PATH
REQUIRED)

find_library(DISCORD_RPC_LIBRARY_RELEASE discord-rpc
PATHS ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib
NO_DEFAULT_PATH
REQUIRED)

set(SOURCE
src/main_dll.cpp
src/config.cpp
src/lua_exec.cpp
src/header_text.cpp
src/ConsoleLib.cpp
src/DCInstance.cpp
src/LuaBackend.cpp
src/config.h
src/game_info.h
src/lua_exec.h
src/wil_extra.h
src/header_text.h
src/ConsoleLib.h
src/DCInstance.h
src/LuaBackend.h
src/MemoryLib.h
)

add_custom_target(clang-format
COMMAND clang-format -i -style=file ${SOURCE}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)

add_custom_target(build-info
COMMAND ${CMAKE_COMMAND}
-DPROGRAM_VERSION:STRING=${PROGRAM_VERSION}
-DINSTALL_DIR:STRING=${CMAKE_CURRENT_BINARY_DIR}
-P CMake/BuildInfo.cmake
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
VERBATIM
)

add_library(DBGHELP SHARED ${SOURCE})
add_dependencies(DBGHELP build-info)

if(MSVC)
# FUTURE(Sirius902) ZTD_STD_LIBRARY_RANGES is broken currently on MSVC
target_compile_options(DBGHELP PRIVATE -W4 -WX -DZTD_STD_LIBRARY_RANGES=0)
else()
target_compile_options(DBGHELP PRIVATE -Wall -Wextra -Wpedantic)
endif()

FUTURE(Sirius902) Use tomlplusplus as header only because of weird linking issues

target_compile_definitions(DBGHELP PRIVATE -DUNICODE -D_UNICODE -DTOML_HEADER_ONLY=1)
target_include_directories(DBGHELP PRIVATE
external/include
${LUA_INCLUDE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
)
target_link_libraries(DBGHELP PRIVATE
ztd.text
WIL::WIL
${LUA_LIBRARIES}
$<$CONFIG:Debug:${DISCORD_RPC_LIBRARY_DEBUG}>
$<$CONFIG:Release:${DISCORD_RPC_LIBRARY_RELEASE}>
)

unset(PROGRAM_VERSION CACHE)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions