【问题标题】:Building VRPN server with Python 3.4 64-bit on Windows在 Windows 上使用 Python 3.4 64 位构建 VRPN 服务器
【发布时间】:2015-11-18 13:29:08
【问题描述】:

我正在尝试在 Windows 7 64 位上使用 Python 3.4 64 位构建带有 Python3 标志的 VRPN 服务器,但似乎存在问题。 BlenderVR 软件需要这个。

这是我的程序:

  • 1) 我使用 CMake 创建 makefile(我使用的是 3.4.0 版本,但我也尝试过不同的版本)。我用这个命令来做(那些标志应该在那里,但没有它们的结果似乎是一样的):

cmake -G"MinGW Makefiles"
-HD:\My\BlenderVR\plugins\vrpn
-BD:\My\BlenderVR\plugins\cmake
-DVRPN_BUILD_PYTHON=OFF
-DVRPN_BUILD_PYTHON_HANDCODED_2X=OFF
-DVRPN_BUILD_PYTHON_HANDCODED_3X=ON

我以前也添加了这些标志,但似乎没有它们也可以找到 Python

-DPYTHON_INCLUDE_DIR=D:\My\BlenderVR\Required\Python3\include
-DPYTHON_LIBRARY=D:\My\BlenderVR\Required\Python3\libs\python34.lib

Python 已正确找到,此操作不会引发任何错误。

  • 2) 然后我使用 mingw32-make.exe 构建它,我得到这个错误:

[90%] 链接 CXX 共享模块 vrpn.pyd
D:/My/BlenderVR/Required/Python3/libs/python34.lib:添加错误 符号:文件格式无法识别
collect2.exe:错误:ld 返回 1 个退出状态
python\CMakeFiles\vrpn-python.dir\build.make:505: 配方 目标 'python/vrpn .pyd' 失败 mingw32-make[2]: * * * [python/vrpn.pyd] 错误 1 ​​
CMakeFiles\Makefile2:3247: 配方 目标'python/CMakeFiles/vrpn-python.dir/all'失败 mingw32-make[1]: * * * [python/CMakeFiles/vrpn-python.dir/all]
错误 2 Makefile:159: 目标“全部”的配方失败
mingw32-make: [全部] 错误 2

vprn.pyd 是我未来工作的关键。

我发现它需要 libpython34.a 文件(可能)。当我创建它并复制到 Python3/libs 文件夹时,它可以正常工作并完成,但没有出现错误,但装箱的 vprn.pyd 没有正常工作。

我需要的是让 import vrpn 在 python 中使用这个简单的测试(附加构建 vrpn.pyd 的路径):

import sys
sys.path.append('D:/My/BlenderVR/plugins/cmake/python')
import vrpn

它滞后了我的整个计算机一段时间,然后弹出 Python 已停止工作。

我怀疑问题出在我创建的 libpython34.a 文件中:

gendef python34.dll (in Windows/System32)
dlltool -D python34.dll -d python34.def -l libpython34.a

我不知道该如何获取 libpython 文件。我已经尝试了具有许多 CMake 标志的各种版本的 CMake 和 MinGW(如 MinGWPy、TDM、w64)。我能够使用 32 位 Python 使其工作,但我需要 64 位版本,否则它不适用于 BlenderVR 环境。

我知道这是一个非常具体的问题,起初可能有点令人困惑,但我不知道该怎么说。我会很高兴有任何可以提供帮助的东西。谢谢。

【问题讨论】:

  • 我会尝试查看 vrpn.pyddependency walker 以检查是否存在任何 32/64 位不匹配或找不到的 .dll。

标签: python windows cmake mingw vrpn


【解决方案1】:

mingwpy 应该使用 pip 安装(直到它在 PYPI 正式发布):

pip install -i https://pypi.anaconda.org/carlkl/simple mingwpy

所有必要的导入文件都会自动复制到 python\libs 文件夹中。 如果 python\Scripts 在 PATH 中,它应该可以开箱即用。

您必须确保 Blender Python 配备了两个导入文件

D:\My\BlenderVR\Required\Python3\libs\libpython\libpython34.dll.a
D:\My\BlenderVR\Required\Python3\libs\libpython\libmsvcr100.a

【讨论】:

  • 感谢您的回复。它看起来很有希望,但是在 mingw32-make 时抛出了这个错误:[ 51%] Linking CXX executable time_test.exe CMakeFiles\time_test.dir/objects.a(time_test.cpp.obj): In function get_time_using_ftime(unsigned long&, unsigned long&)': D:/BlenderVR/plugins/vrpn/time_test.cpp:56: undefined reference to __imp__ftime' 我已经尝试了我想到的任何东西,但我不知道如何摆脱这个错误。其他 MinGW 发行版不这样做。
  • 您可以按照sourceforge.net/p/mingw-w64/bugs/363 中的说明将符号_ftime 替换为_ftime64。msvcr90.dll 或msvcr100.dll 中不再存在_ftime 符号。
  • 成功了!非常感谢,你帮了我很大的忙。抱歉回复晚了,我比较忙。如果你们遇到这个错误,只需在 time_test.cpp 文件中查找/替换 _ftime 到 _ftime64 就可以了。
猜你喜欢
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多