До сих пор мне удалось создать статическую библиотеку C ++ Tensorflow в GNU / Linux Ubuntu и статическую библиотеку C ++ Tensorflow в Windows 7, обе 64-разрядные версии (для последних, использующих this и это руководство , хотя только частично, потому что Tensorflow не встроен в мою версию Visual Studio 2017, и поэтому вместо этого я создал его с помощью MSBuild).
Сборка Linux была довольно простой, однако мне потребовалось некоторое время, чтобы заставить ее работать на Windows 7. Я не использовал лицевую панель, а вместо этого прибегнул к cmake, и в итоге все заработало нормально.
Однако сейчас я пытаюсь создать 32-битную библиотеку C ++ Tensorflow на том же компьютере с Windows 7, и, к сожалению, она не работает. Я изменил конфигурацию cmake и команды сборки соответственно:
cmake .. -A Win32 -DCMAKE_BUILD_TYPE=Release ^
-DSWIG_EXECUTABLE="D:\swigwin-3.0.12\swig.exe" ^
-DPYTHON_EXECUTABLE="C:\anaconda3\envs\tensorflow32\python.exe" ^
-DPYTHON_LIBRARIES="C:\anaconda3\envs\tensorflow32\libs\python35.lib"
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe" ^
/m:1 ^
/p:CL_MPCount=1 ^
/p:Configuration=Release ^
/p:Platform=x86 ^
/p:PreferredToolArchitecture=x86 ALL_BUILD.vcxproj ^
/filelogger
К сожалению, это не удается из-за следующей ошибки:
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\newbuild\ALL_BUILD.vcxproj" (default target) (1) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\newbuild\_beam_search_ops.vcxproj" (default target) (2) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\newbuild\pywrap_tensorflow_internal.vcxproj" (default target) (3) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\newbuild\pywrap_tensorflow_internal_static.vcxproj" (default target) (4) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\newbuild\tf_c.vcxproj" (default target) (5) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\newbuild\tf_cc_framework.vcxproj" (default target) (6) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\newbuild\tf_core_framework.vcxproj" (default target) (7) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\newbuild\proto_text.vcxproj" (default target) (8) ->
(Link target) ->
libprotobuf.lib(descriptor.obj) : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'. [D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\newbuild\proto_text.vcxproj]
Это довольно смущает меня, поскольку я прямо заявляю, что хочу скомпилировать для 32-битного. Кроме того, я загрузил 32-битные библиотеки Python в этой конкретной среде в Anaconda, так что это не должно быть проблемой.
Для libprotobuf.lib доступна 32-битная версия, однако при переключении 64-битной на 32-битную я получаю:
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\ALL_BUILD.vcxproj" (default target) (1) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\_beam_search_ops.vcxproj" (default target) (2) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\pywrap_tensorflow_internal.vcxproj" (default target) (3) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\pywrap_tensorflow_internal_static.vcxproj" (default target) (4) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\tf_c.vcxproj" (default target) (5) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\tf_cc_framework.vcxproj" (default target) (6) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\tf_core_framework.vcxproj" (default target) (7) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\proto_text.vcxproj" (default target) (8) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\tf_core_lib.vcxproj" (default target) (12) ->
(Lib target) ->
random_distributions.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library. [D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\tf_core_lib.vcxproj]
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\ALL_BUILD.vcxproj" (default target) (1) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\_beam_search_ops.vcxproj" (default target) (2) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\pywrap_tensorflow_internal.vcxproj" (default target) (3) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\pywrap_tensorflow_internal_static.vcxproj" (default target) (4) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\tf_c.vcxproj" (default target) (5) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\tf_cc_framework.vcxproj" (default target) (6) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\tf_core_framework.vcxproj" (default target) (7) ->
"D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\proto_text.vcxproj" (default target) (8) ->
(Link target) ->
gen_proto_text_functions_lib.obj : error LNK2019: unresolved external symbol ""public: bool __thiscall google::protobuf::FieldDescriptor::is_map(void)const " (?is_map@FieldDescriptor@protobuf@google@@QBE_NXZ)" in function ""private: void __thiscall tensorflow::`anonymous namespace'::Generator::AppendFieldAppend(class google::protobuf::FieldDescriptor const &)" (?AppendFieldAppend@Generator@?A0xc7bf60d9@tensorflow@@AAEXABVFieldDescriptor@protobuf@google@@@Z)". [D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\proto_text.vcxproj]
D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\Release\proto_text.exe : fatal error LNK1120: 1 unresolved externals [D:\tensorflow\v1.6.0-rc0\tensorflow\contrib\cmake\build\proto_text.vcxproj]
Это был длинный выстрел. Я понимаю, что не могу просто заменить одну библиотеку на другую, однако, я действительно в растерянности, почему она не работает или почему она тянет / собирает 64-битную версию libprotobuf.lib или как вообще решить эту проблему.