mirror of
https://gitcode.com/JianFeeeee/LuaCangjia_api.git
synced 2026-09-22 18:08:07 +00:00
添加单元测试,修复部分错误
This commit is contained in:
@ -1,30 +1,36 @@
|
||||
# the minimum version of CMake.
|
||||
cmake_minimum_required(VERSION 3.12)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
|
||||
project(LuaPluginLib)
|
||||
project(LuaCJAPILib)
|
||||
|
||||
list(APPEND EXTRA_LIBS dl)
|
||||
# 定义一个变量,并赋值为当前模块cpp目录
|
||||
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
set(ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
# 添加头文件.h目录,包括cpp,cpp/include,告诉cmake去这里找到代码引入的头文件
|
||||
include_directories(${NATIVERENDER_ROOT_PATH}
|
||||
${NATIVERENDER_ROOT_PATH}/lua
|
||||
${NATIVERENDER_ROOT_PATH}/json)
|
||||
|
||||
# 添加lua子目录
|
||||
include_directories(${ROOT_PATH} ${ROOT_PATH}/lua)
|
||||
add_subdirectory(lua)
|
||||
|
||||
add_library(luarunner STATIC
|
||||
lua_runner.cpp)
|
||||
# ==================== 核心修改 ====================
|
||||
|
||||
add_library(luacjapi SHARED
|
||||
lua_cj_api.cpp)
|
||||
target_link_libraries(luarunner
|
||||
# 方案:使用 OBJECT 库
|
||||
# 1. OBJECT 库不会生成 .a 文件,而是生成中间对象文件 (.o)。
|
||||
# 2. 当 luacjapi (SHARED) 引用 luarunner (OBJECT) 时,CMake 会自动开启 -fPIC 编译选项。
|
||||
# 3. 这解决了 luarunner 缺少 PIC 导致的运行时崩溃问题。
|
||||
add_library(luarunner OBJECT lua_runner.cpp)
|
||||
|
||||
# 显式声明依赖,虽然 OBJECT 库不链接,但这建立了依赖关系
|
||||
target_include_directories(luarunner PRIVATE ${ROOT_PATH}/lua)
|
||||
|
||||
add_library(luacjapi SHARED lua_cj_api.cpp)
|
||||
|
||||
# 链接阶段
|
||||
# 1. luarunner (OBJECT): 代码直接嵌入 luacjapi.so
|
||||
# 2. lua (STATIC): 必须用 -Wl,--whole-archive 包裹。
|
||||
# 原因:lua_cj_api.cpp 只调用了少数 Lua 函数,如果不强制全链接,
|
||||
# 链接器会丢弃 print, io 等标准库函数,导致 Lua 运行时功能缺失。
|
||||
target_link_libraries(luacjapi PRIVATE
|
||||
luarunner
|
||||
"-Wl,--whole-archive"
|
||||
lua
|
||||
"-Wl,--no-whole-archive"
|
||||
m
|
||||
)
|
||||
target_link_libraries(luacjapi
|
||||
luarunner
|
||||
${EXTRA_LIBS}
|
||||
)
|
||||
Reference in New Issue
Block a user