Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

编译问题 #20

Closed
AnyaCoder opened this issue Nov 28, 2024 · 1 comment
Closed

编译问题 #20

AnyaCoder opened this issue Nov 28, 2024 · 1 comment
Labels
bug Something isn't working enhancement New feature or request
Milestone

Comments

@AnyaCoder
Copy link
Contributor

我成功使用了VS 2022编译出来了python3.10下可用的pyd文件,解决dll丢失的问题
复现如下:

  1. 不用pip install . -v 安装
  2. 手动使用 cmake 安装
  3. 修改cmake文件如下
cmake_minimum_required(VERSION 3.13)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
  execute_process(
      COMMAND chcp 65001
  )
endif()

project(LAppModelWrapper)

# set(CMAKE_BUILD_TYPE "Release")

message("${CMAKE_BUILD_TYPE}")
message(STATUS "Python executable: ${PYTHON_EXECUTABLE}")
message(STATUS "Python version: ${PYTHON_VERSION}")

set(LIB_NAME LAppModelWrapper)
set(PROJECT_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
set(RES_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Resources)

# prevent python root dir being shadowed by registry
set(Python3_FIND_REGISTRY "NEVER")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /BASE:0x800000000")
message("Not found PYTHON_INSTALLATION_PATH in environment variables. \nUse default path.")
set(CMAKE_PREFIX_PATH D:/miniconda/envs/anya)


if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/static)
  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
  set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Zi")
  add_compile_options("/utf-8" "/wd4018" "/wd4244" "/wd4996")
  # add_link_options("/NODEFAULTLIB:LIBCMT" "/DEBUG") 
  add_link_options("/NODEFAULTLIB:LIBCMT") 
else()
  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE})
  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE})
  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/static/${CMAKE_BUILD_TYPE})
endif()  

find_package(Python3 REQUIRED Development)

message("Python_LIBRARIES " ${Python_LIBRARIES})

add_subdirectory(Main)

# 创建Python扩展模块
add_library(LAppModelWrapper SHARED LAppModelWrapper.cpp)
target_link_libraries(LAppModelWrapper PRIVATE Python3::Python live2d)

# Configure for Linux / Windows
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
  set(MODULE_NAME lib${LIB_NAME}.so)
  set(OUTPUT_NAME live2d.so)
else(CMAKE_SYSTEM_NAME MATCHES "Windows")
  set(MODULE_NAME ${LIB_NAME}.dll)
  set(OUTPUT_NAME live2d.pyd)
endif()

# Post build commands
add_custom_command(
  TARGET ${LIB_NAME}
  POST_BUILD
  COMMAND
    ${CMAKE_COMMAND} -E
      copy $<TARGET_FILE_DIR:${LIB_NAME}>/${MODULE_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/package/live2d/v3/${OUTPUT_NAME}
)
  1. 执行cmake命令
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --config Release
  1. 将构建产物live2d.pyd 移动到 site-packages/live2d-py下,覆盖原有的.pyd文件。

这样就解决了问题。
但是我希望官方可以自动化该过程。

@Arkueid Arkueid added the enhancement New feature or request label Dec 20, 2024
@Arkueid Arkueid added the bug Something isn't working label Mar 21, 2025
@Arkueid
Copy link
Owner

Arkueid commented Mar 21, 2025

bug: 首次使用 pip install . -v 安装时,无法将编译产物 live2d.pyd/live2d.so 打包
原因:打包过程在编译环节之前,编译前 package/live2d/v3 目录下没有 .pyd/.so 文件

应当在 setup.py 中重写这部分逻辑

#72

@Arkueid Arkueid added this to the v0.4.5 milestone Mar 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants