如何在有静态库依赖的情况下构建静态库?
我在创建一个依赖于另一个我必须构建的库的库时遇到了问题。
我使用SDL3的源代码并将其编译为一个静态库。随后我又构建了另一个静态库,它依赖于SDL3(该静态库的源码本身就包含SDL3)。
我当前的 CMakeLists.txt 看起来是这样的(这是当前的迭代版本,但没有一个能正确工作):
cmake_minimum_required(VERSION 3.10)
project(StaticLib VERSION 1 LANGUAGES C CXX)
# Auto use project name
set(CURRENT_PROJECT_NAME ${PROJECT_NAME})
# Optimize
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
set(SDL_SHARED OFF CACHE BOOL "Build shared SDL library" FORCE) ##
set(SDL_STATIC ON CACHE BOOL "Build static SDL library" FORCE) ##
set(SDL_TEST_LIBRARY OFF CACHE BOOL "Disable SDL test library" FORCE) ##
set(SDL_TESTS OFF CACHE BOOL "Disable SDL tests" FORCE) ##
add_subdirectory(extern/sdl3) ##
# Create static lib
add_library(${PROJECT_NAME} STATIC core.cpp core.h graphics.h $<TARGET_OBJECTS:SDL3-static> )
target_include_directories(${CURRENT_PROJECT_NAME} PUBLIC
"extern/sdl3/include/build_config"
"extern/sdl3/src"
"extern/sdl3/include"
) ##
target_link_libraries(${CURRENT_PROJECT_NAME} PUBLIC SDL3::SDL3 SDL3::SDL3-static) ##
在编译库(libStaticLib.a)时,没有错误。然而,在使用该库编译可执行文件时,g++给出未定义引用错误。例如,__imp_timeEndPeriod,GUID_NULL。
设置:
- 操作系统:Windows 10 (LTSC 2021)
- 编译器:MinGW UCRT64 gcc & g++
解决方案
在评论区的反馈之后(@HolyBlackCat、@rustyx),我重新调整了构建流程,将SDL3与 StaticLib分离,然后将它们都链接到可执行文件中,并且还链接SDL3的依赖项(-lwinmm、-lgdi32等)。编译现在可以正常通过。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。