From 28700f98491da60e26e4d7f6d607328526387d57 Mon Sep 17 00:00:00 2001 From: gggaa2152 <60614405+gggaa2152@users.noreply.github.com> Date: Mon, 6 Apr 2026 05:46:19 +0800 Subject: [PATCH] Update CMakeLists.txt --- CMakeLists.txt | 52 +++++++++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 35dcd2131..be8bcc142 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,17 +1,17 @@ cmake_minimum_required(VERSION 3.10) project(JKMenu) -# 设置 C++ 标准和 STL +# 1. 强制使用静态 STL,减少对系统库的依赖 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(ANDROID_STL c++_static) -# 包含目录 +# 2. 包含目录(确保 backends 路径正确) include_directories(${CMAKE_CURRENT_SOURCE_DIR}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/backends) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) # 如果 Dobby 的头文件在 include 里 -# ImGui 核心源文件 -# 将所有 ImGui 源文件打入主库,防止报 liblibcimgui.so 找不到的错误 +# 3. ImGui 源文件定义 set(IMGUI_SRCS imgui.cpp imgui_draw.cpp @@ -22,23 +22,35 @@ set(IMGUI_SRCS backends/imgui_impl_opengl3.cpp ) -# 1. 编译注入器 (jk_injector) +# --- 重点:编译插件库 libJKMenu.so --- +# 增加渲染相关的源文件,确保 OpenGL 绑定完整 +add_library(JKMenu SHARED + main.cpp + ${IMGUI_SRCS} +) + +# 4. 解决符号隐藏问题 (非常重要!) +# 很多游戏会扫描导出的符号,隐藏非必要符号可以提高隐蔽性并防止冲突 +set_target_properties(JKMenu PROPERTIES + C_VISIBILITY_PRESET hidden + CXX_VISIBILITY_PRESET hidden + VISIBILITY_INLINES_HIDDEN ON +) + +# 5. 链接库文件 +# 注意:Dobby 最好使用全路径,且放在最后链接 +target_link_libraries(JKMenu + android + log + EGL + GLESv3 + -Wl,--whole-archive ${CMAKE_CURRENT_SOURCE_DIR}/libdobby.a -Wl,--no-whole-archive + -static-libstdc++ +) + +# --- 编译注入器 --- add_executable(jk_injector injector.cpp) target_link_libraries(jk_injector log) -# 2. 编译插件库 (libJKMenu.so) -add_library(JKMenu SHARED main.cpp ${IMGUI_SRCS}) - -# 链接库文件 -# 确保 libdobby.a 在项目根目录下 -target_link_libraries(JKMenu - ${CMAKE_CURRENT_SOURCE_DIR}/libdobby.a - android - GLESv3 - EGL - log -) - -# 设置输出名称 -set_target_properties(jk_injector PROPERTIES OUTPUT_NAME "jk_injector") +# 6. 设置输出名称 set_target_properties(JKMenu PROPERTIES OUTPUT_NAME "JKMenu")