XLua PS4或PS5平台编译

分两步
一、得到需要编译的sln
二、编译

注意:在编译过程中会遇usocket.h报错,这个问题可以通过删除luasocket解决,删除luascocket需要修改CMakeLists文件,具体操作可以参考编译的usocket.h报错(编译第四个)(往下翻)

 

一、得到需要编译的sln

安装cmake
安装SDK
安装cmake扩展:
PS4运行:${SCE_ROOT_DIR}/ORBIS/Tools/CMake Extensions/CMakeExtensionsForPS4-XXXX.msi
PS5运行:${SCE_ROOT_DIR}/Prospero/Tools/CMake Extensions/CMakeExtensionsForPS5-XXXX.msi

运行cmake
选好source code文件夹和build文件夹
点击Configure

platform填写ORBIS(PS4的)或Prospero(PS5的)
选择Specify toolchain file for cross-compiling
点击NEXT

选择路径
PS4的:${SCE_ROOT_DIR}/ORBIS/Tools/CMake/PS4.cmake
PS5的:${SCE_ROOT_DIR}/Prospero/Tools/CMake/PS5.cmake
点击Finish

等待 直到出现 Configuring done
点击Generate
等待 直到出现 Generating done
结束

至此,得到了一份XLua的VS工程

 

二、编译

1.修改LUA_API 的__declspec(dllexport)
找到luaconf.h文件
解决方案有多种,我选择直接对红框内取反

这步是为了能直接调取,不然会显示找不到函数


2.会缺少一系列的C标准库文件
下载MINGW,在其include文件夹内能找到这些文件,将缺少的文件移动到工程目录下
MINGW的官网和下载地址:
https://www.mingw-w64.org/
https://github.com/mstorsjo/llvm-mingw/releases
这是我在操作过程中发现缺少的文件:
_mingw.h
malloc.h
msvcrtver.h
sdkddkver.h
signal.h
w32api.h

 

3.ioslib报错

为LUA_TMPNAMBUFSIZE赋值即可通过编译

L_tmpnam 是 tmpnam 生成的临时文件名的长度。
L_tmpnam相关:https://learn.microsoft.com/zh-cn/cpp/c-runtime-library/tmp-max-l-tmpnam?view=msvc-170

 

4.usocket.h报错

netdb.h 定义了与网络有关的结构,变量类型,宏,函数等

在官网搜索到了以下相关内容

 

可以按他说的一步步解决,也可以直接把luasocket干掉
目前,我选择干掉luasocket
从CMakeLists文件下手

  1 # Tencent is pleased to support the open source community by making xLua available.
  2 # Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved.
  3 # Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
  4 # http://opensource.org/licenses/MIT
  5 # Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
  6 
  7 cmake_minimum_required(VERSION 2.8)
  8 
  9 project(XLua)
 10 
 11 option ( UINT_ESPECIALLY "using custom ulong" OFF )
 12 option ( USING_LUAJIT "using luajit" OFF )
 13 option ( GC64 "using gc64" OFF )
 14 option ( LUAC_COMPATIBLE_FORMAT "compatible format" OFF )
 15 
 16 find_path(XLUA_PROJECT_DIR NAMES SConstruct
 17     PATHS 
 18     ${CMAKE_SOURCE_DIR}
 19     NO_DEFAULT_PATH
 20     )
 21 
 22 MARK_AS_ADVANCED(XLUA_PROJECT_DIR)
 23 
 24 if (NOT LUA_VERSION)
 25     set(LUA_VERSION "5.3.5")
 26 endif()
 27 
 28 set(LUA_SRC_PATH lua-${LUA_VERSION}/src)
 29 set(LUAJIT_SRC_PATH luajit-2.1.0b3/src)
 30 
 31 set ( LUA_IDSIZE 120 CACHE STRING "gives the maximum size for the description of the source." )
 32 
 33 configure_file ( ${LUA_SRC_PATH}/luaconf.h.in ${CMAKE_CURRENT_BINARY_DIR}/luaconf.h )
 34 
 35 include_directories(
 36     ${CMAKE_SOURCE_DIR}
 37     ${LUA_SRC_PATH}
 38     ${CMAKE_CURRENT_BINARY_DIR}
 39     ${THIRDPART_INC}
 40 )
 41 aux_source_directory(${LUA_SRC_PATH} LUA_CORE)
 42 list(REMOVE_ITEM LUA_CORE ${LUA_SRC_PATH}/lua.c ${LUA_SRC_PATH}/luac.c)
 43 set ( LUA_LIB )
 44 
 45 
 46 set ( XLUA_CORE
 47     i64lib.c
 48     xlua.c
 49 )
 50 
 51 if (NOT USING_LUAJIT)
 52     list (APPEND XLUA_CORE memory_leak_checker.c)
 53 endif ( )
 54 
 55 macro(source_group_by_dir proj_dir source_files)
 56     if(MSVC OR APPLE)
 57         get_filename_component(sgbd_cur_dir ${proj_dir} ABSOLUTE)
 58         foreach(sgbd_file ${${source_files}})
 59             get_filename_component(sgbd_abs_file ${sgbd_file} ABSOLUTE)
 60             file(RELATIVE_PATH sgbd_fpath ${sgbd_cur_dir} ${sgbd_abs_file})
 61             string(REGEX REPLACE "\(.*\)/.*" \\1 sgbd_group_name ${sgbd_fpath})
 62             string(COMPARE EQUAL ${sgbd_fpath} ${sgbd_group_name} sgbd_nogroup)
 63             string(REPLACE "/" "\\" sgbd_group_name ${sgbd_group_name})
 64             if(sgbd_nogroup)
 65                 set(sgbd_group_name "\\")
 66             endif(sgbd_nogroup)
 67             source_group(${sgbd_group_name} FILES ${sgbd_file})
 68         endforeach(sgbd_file)
 69     endif(MSVC OR APPLE)
 70 endmacro(source_group_by_dir)
 71 
 72 source_group_by_dir(${CMAKE_CURRENT_SOURCE_DIR} LUA_CORE)
 73 source_group_by_dir(${CMAKE_CURRENT_SOURCE_DIR} LUA_LIB)
 74 source_group_by_dir(${CMAKE_CURRENT_SOURCE_DIR} XLUA_CORE)
 75 
 76 add_library(xlua SHARED
 77     ${LUA_CORE}
 78     ${LUA_LIB}
 79     ${XLUA_CORE}
 80     ${THIRDPART_SRC}
 81 )
 82 
 83 if ( WIN32 AND NOT CYGWIN )
 84     target_compile_definitions (xlua PRIVATE LUA_BUILD_AS_DLL)
 85 endif ( )
 86 
 87 if (GC64 AND USING_LUAJIT)
 88     target_compile_definitions (xlua PRIVATE LUAJIT_ENABLE_GC64)
 89 endif ()
 90 
 91 if (LUAC_COMPATIBLE_FORMAT AND NOT USING_LUAJIT)
 92     target_compile_definitions (xlua PRIVATE LUAC_COMPATIBLE_FORMAT)
 93 endif ()
 94 
 95 if(UINT_ESPECIALLY)
 96     ADD_DEFINITIONS(-DUINT_ESPECIALLY)
 97 endif()
 98             
 99 target_link_libraries(xlua
100 ${THIRDPART_LIB}
101 )
CMakeLists

 

posted @ 2022-10-13 17:14  AutoMaintyc  阅读(494)  评论(0)    收藏  举报