如何构建TensorFlow C++;Windows XP 32位上的库 我试图为WindowsXP构建TensorFlow的C++库。虽然我已经能够在Windows10上构建和使用它,但32位XP不起作用。背景:我正在开发一个COM模块,它从tensorflow.dll调用函数。我的构建环境: Visual Studio 2017 15.7 CMake 3.11.1 张量流1.8 视窗10

如何构建TensorFlow C++;Windows XP 32位上的库 我试图为WindowsXP构建TensorFlow的C++库。虽然我已经能够在Windows10上构建和使用它,但32位XP不起作用。背景:我正在开发一个COM模块,它从tensorflow.dll调用函数。我的构建环境: Visual Studio 2017 15.7 CMake 3.11.1 张量流1.8 视窗10,tensorflow,Tensorflow,我用于构建tensorflow.dll的顺序是: 打开“VS 2017的x64_x86交叉工具命令提示符” 尝试强制使用Win XP中可用的函数:set CXXFLAGS=/D_WINVER=0x0501/D_WIN32_WINNT=0x0501 将Git添加到路径:set path=%path%;C:\ProgramFiles(x86)\Git\bin 修复将*.proto文件转换为*.pb.h文件的CMake文件 配置CMake:CMake-Win32-T v141\u xp,host=x

我用于构建tensorflow.dll的顺序是:

  • 打开“VS 2017的x64_x86交叉工具命令提示符”
  • 尝试强制使用Win XP中可用的函数:
    set CXXFLAGS=/D_WINVER=0x0501/D_WIN32_WINNT=0x0501
  • 将Git添加到路径:
    set path=%path%;C:\ProgramFiles(x86)\Git\bin
  • 修复将*.proto文件转换为*.pb.h文件的CMake文件
  • 配置CMake:
    CMake-Win32-T v141\u xp,host=x64-DCMAKE\u SYSTEM\u VERSION=7.0-DCMAKE\u BUILD\u TYPE=Release-DPYTHON\u EXECUTABLE=C:\Users\williams\AppData\Local\Continuum\Anaconda3\envs\tensorflow\python.exe-Dtensorflow\u BUILD\u SHARED\u LIB=ON-Dtensorflow\u BUILD\u BINDINGS=OFF-Dtensorflow\u-Dtensorflow\u WIN\u CPU\u SIMD\u OPTIONS=“/arch:IA32”
  • 构建:
    cmake——构建--目标tensorflow--配置发布--/fileLogger/m:1/p:CL\u MPCount=1
最后一步还涉及一些手工劳动,因为构建过程不会将.lib文件从第三部分依赖项复制到需要它们的地方。无论出于什么原因,很多安装项目都无法运行,因此每次在查找缺少的lib文件时,构建失败时,我都必须手动运行。完成后,构建成功完成

接下来,我将COM模块(一个DLL)和TensorFlow DLL复制到Windows XP虚拟机进行测试,并尝试注册COM模块,但出现错误
LoadLibrary(“MyDLL.DLL”)-找不到指定的过程
。我不知道它在寻找什么过程,所以我能提供的最好方法是Dependency Walker突出显示WS2_32.DLL,并告诉我它找不到
inet_ntop
inet_pton

关于如何构建TensorFlow,使其不使用这两个函数,有什么建议吗

附言“停止使用XP,它已经过时,不再受支持”的建议在这里没有帮助。升级到Windows 10是绝对的最后手段,因为它会在测试该软件的设施中造成中断

编辑1:

这两个函数
inet\u pton
inet\u ntop
仅在一个文件中使用,该文件构成TensorFlow中Google云存储支持的一部分。除了tensorflow.dll之外,构建过程还生成了tensorflow_static.lib。针对静态版本进行链接并添加一些不包含在tensorflow_static.lib中的依赖项,使用
inet.*
函数删除了代码

不过,我的COM模块在Windows XP上仍然不起作用,因为文件
tensorflow\core\platform\Windows\env.cc
使用了仅在Windows Vista中引入的
CloseThreadpoolWork
、SubmitThreadpoolWork等函数。看起来我必须用其他东西来替换它们,因为我在TensorFlow中没有看到替代的实现


此外,我发现
tensorflow\contrib\cmake\CMakeLists.txt
强制使用
\u WIN32\u WINNT=0x0A00
,并且
cxflags
是错误的环境变量。将其更改为
CMAKE_CXX_FLAGS
至少可以包含我的宏定义,FWIW。

最后,我放弃了这一点,因为这是不可能的。甚至用Boost中的东西替换线程池函数也没有帮助。如果其他人成功地让它工作,我很乐意接受这个答案,但到目前为止,这似乎是不可能的。

将tensorflow移植到windows xp几乎是不可能的,因为:

  • TF的平台依赖代码需要一些比winxp更高的Windows API,例如线程池API。这可能通过使用第三方线程池libs来绕过

  • nsync、protobuf和eigen是TF的核心部分,它们使用C++11 thread_local,这使得它们无法作为dll运行时加载,有关详细信息,请参阅。从理论上讲,这一后来的特性可以被旧的windows TLS API所取代,这需要对TF的核心框架进行许多修改

  • 无论如何,如果你真的需要xp支持,祝你好运