首页 > 解决方案 > tensorflow:在 Windows 7 上使用 g++ 6.3.0(通过 MinGW)构建操作时出错

问题描述

我是 tensorflow 的新手,我的目标是运行由另一个用户创建的预构建模型。作为此过程的第一步,我正在尝试构建几个操作。但是,我什至无法构建基本的操作,更不用说那些实际执行有用任务的操作了。举个例子,我按照这些指示创建了以下内容zero_out.cc

#include "tensorflow/core/framework/op.h"
#include "tensorflow/core/framework/op_kernel.h"

REGISTER_OP("ZeroOut")
    .Input("to_zero: int32")
    .Output("zeroed: int32");

using namespace tensorflow;

class ZeroOutOp : public OpKernel {
 public:
  explicit ZeroOutOp(OpKernelConstruction* context) : OpKernel(context) {}

  void Compute(OpKernelContext* context) override {
    // Grab the input tensor
    const Tensor& input_tensor = context->input(0);
    auto input = input_tensor.flat<int32>();

    // Create an output tensor
    Tensor* output_tensor = NULL;
    OP_REQUIRES_OK(context, context->allocate_output(0, input_tensor.shape(),
                                                     &output_tensor));
    auto output = output_tensor->template flat<int32>();

    // Set all but the first element of the output tensor to 0.
    const int N = input.size();
    for (int i = 1; i < N; i++) {
      output(i) = 0;
    }

    // Preserve the first input value if possible.
    if (N > 0) output(0) = input(0);
  }
};

之后,我尝试在cmd(调用g++ 6.3.0,我通过安装MinGW)中运行以下命令:

g++ -std=c++11 -msse2 -shared zero_out.cc -o zero_out.so -I "C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include" -l tensorflow_framework -L "C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow" -fPIC -Wl,-rpath "C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow"

上面的行没有产生.so文件,而是产生了各种各样的错误(我已经截断了这些错误以满足堆栈溢出字符限制):

In file included from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/message_lite.h:48:0,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/generated_enum_util.h:36,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/map.h:48,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/generated_message_table_driven.h:34,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_def.pb.h:26,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_def_builder.h:24,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op.h:23,
                 from zero_out.cc:1:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/stubs/once.h:43:24: error: 'once_flag' in namespace 'std' does not name a type
 using once_flag = std::once_flag;
                        ^~~~~~~~~
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/stubs/once.h: In function 'void google::protobuf::internal::call_once(Args&& ...)':
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/stubs/once.h:46:3: error: 'call_once' is not a member of 'std'
   std::call_once(std::forward<Args>(args)...);
   ^~~
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/stubs/once.h:46:3: note: suggested alternative:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/stubs/once.h:45:6: note:   'google::protobuf::internal::call_once'
 void call_once(Args&&... args ) {
      ^~~~~~~~~
In file included from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/descriptor.h:62:0,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/generated_message_reflection.h:47,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_def.pb.h:30,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_def_builder.h:24,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op.h:23,
                 from zero_out.cc:1:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/stubs/mutex.h: At global scope:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/stubs/mutex.h:107:8: error: 'mutex' in namespace 'std' does not name a type
   std::mutex mu_;
        ^~~~~
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/stubs/mutex.h: In member function 'void google::protobuf::internal::WrappedMutex::Lock()':
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/stubs/mutex.h:99:43: error: 'mu_' was not declared in this scope
   void Lock() GOOGLE_PROTOBUF_ACQUIRE() { mu_.lock(); }
                                           ^~~
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/stubs/mutex.h: In member function 'void google::protobuf::internal::WrappedMutex::Unlock()':
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/stubs/mutex.h:100:45: error: 'mu_' was not declared in this scope
   void Unlock() GOOGLE_PROTOBUF_RELEASE() { mu_.unlock(); }
                                             ^~~
In file included from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/generated_message_reflection.h:47:0,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_def.pb.h:30,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_def_builder.h:24,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op.h:23,
                 from zero_out.cc:1:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/descriptor.h: At global scope:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/descriptor.h:221:13: error: 'once_flag' in namespace 'google::protobuf::internal' does not name a type
   internal::once_flag* once_;
             ^~~~~~~~~
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/descriptor.h: In member function 'void google::protobuf::internal::LazyDescriptor::Init()':
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/descriptor.h:189:5: error: 'once_' was not declared in this scope
     once_ = nullptr;
     ^~~~~
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/descriptor.h: At global scope:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/descriptor.h:787:13: error: 'once_flag' in namespace 'google::protobuf::internal' does not name a type
   internal::once_flag* type_once_;
             ^~~~~~~~~
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/descriptor.h:1461:13: error: 'once_flag' in namespace 'google::protobuf::internal' does not name a type
   internal::once_flag* dependencies_once_;
             ^~~~~~~~~
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/descriptor.h: In member function 'google::protobuf::FieldDescriptor::Type google::protobuf::FieldDescriptor::type() const':
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/descriptor.h:2053:7: error: 'type_once_' was not declared in this scope
   if (type_once_) {
       ^~~~~~~~~~
In file included from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_def.pb.h:30:0,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_def_builder.h:24,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op.h:23,
                 from zero_out.cc:1:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/generated_message_reflection.h: At global scope:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/google/protobuf/generated_message_reflection.h:271:3: error: 'once_flag' does not name a type
   once_flag* once;
   ^~~~~~~~~
In file included from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op.h:32:0,
                 from zero_out.cc:1:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/platform/mutex.h:231:8: error: 'cv_status' in namespace 'std' does not name a type
   std::cv_status wait_for(mutex_lock& lock,
        ^~~~~~~~~
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/platform/mutex.h: In function 'tensorflow::ConditionResult tensorflow::WaitForMilliseconds(tensorflow::mutex_lock*, tensorflow::condition_variable*, tensorflow::int64)':
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/platform/mutex.h:249:3: error: 'cv_status' is not a member of 'std'
   std::cv_status s = cv->wait_for(*mu, std::chrono::milliseconds(ms));
   ^~~
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/platform/mutex.h:250:11: error: 's' was not declared in this scope
   return (s == std::cv_status::timeout) ? kCond_Timeout : kCond_MaybeNotified;
           ^
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/platform/mutex.h:250:21: error: 'std::cv_status' has not been declared
   return (s == std::cv_status::timeout) ? kCond_Timeout : kCond_MaybeNotified;
                     ^~~~~~~~~
In file included from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/platform/mutex.h:310:0,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op.h:32,
                 from zero_out.cc:1:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/platform/default/mutex.h: At global scope:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/platform/default/mutex.h:25:6: error: 'cv_status' in namespace 'std' does not name a type
 std::cv_status wait_until_system_clock(
      ^~~~~~~~~
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/platform/default/mutex.h:31:6: error: 'cv_status' in namespace 'std' does not name a type
 std::cv_status condition_variable::wait_for(
      ^~~~~~~~~
In file included from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:0,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/numeric_types.h:20,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/allocator.h:26,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_kernel.h:24,
                 from zero_out.cc:2:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/unsupported/Eigen/CXX11/Tensor:44:17: error: conflicting declaration 'typedef long int int32_t'
 typedef __int32 int32_t;
                 ^~~~~~~
In file included from c:\mingw\lib\gcc\mingw32\6.3.0\include\stdint.h:9:0,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\cstdint:41,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\char_traits.h:420,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\string:40,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\stdexcept:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\array:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\tuple:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\functional:55,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op.h:19,
                 from zero_out.cc:1:
c:\mingw\include\stdint.h:62:15: note: previous declaration as 'typedef int int32_t'
 typedef int   int32_t;
               ^~~~~~~
In file included from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:0,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/numeric_types.h:20,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/allocator.h:26,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_kernel.h:24,
                 from zero_out.cc:2:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/unsupported/Eigen/CXX11/Tensor:45:26: error: conflicting declaration 'typedef long unsigned int uint32_t'
 typedef unsigned __int32 uint32_t;
                          ^~~~~~~~
In file included from c:\mingw\lib\gcc\mingw32\6.3.0\include\stdint.h:9:0,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\cstdint:41,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\char_traits.h:420,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\string:40,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\stdexcept:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\array:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\tuple:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\functional:55,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op.h:19,
                 from zero_out.cc:1:
c:\mingw\include\stdint.h:63:19: note: previous declaration as 'typedef unsigned int uint32_t'
 typedef unsigned  uint32_t;
                   ^~~~~~~~
In file included from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/platform/notification.h:27:0,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/lib/core/notification.h:21,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/cancellation.h:22,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_kernel.h:25,
                 from zero_out.cc:2:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/platform/default/notification.h: In member function 'bool tensorflow::Notification::WaitForNotificationWithTimeout(tensorflow::int64)':
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/platform/default/notification.h:69:20: error: 'class tensorflow::condition_variable' has no member named 'wait_for'; did you mean 'wait'?
                cv_.wait_for(l, std::chrono::microseconds(timeout_in_us)) !=
                    ^~~~~~~~
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/platform/default/notification.h:70:25: error: 'std::cv_status' has not been declared
                    std::cv_status::timeout);
                         ^~~~~~~~~
In file included from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:0,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/tensor.h:22,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/device_base.h:26,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_kernel.h:27,
                 from zero_out.cc:2:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/unsupported/Eigen/CXX11/Tensor: At global scope:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/unsupported/Eigen/CXX11/Tensor:44:17: error: conflicting declaration 'typedef long int int32_t'
 typedef __int32 int32_t;
                 ^~~~~~~
In file included from c:\mingw\lib\gcc\mingw32\6.3.0\include\stdint.h:9:0,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\cstdint:41,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\char_traits.h:420,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\string:40,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\stdexcept:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\array:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\tuple:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\functional:55,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op.h:19,
                 from zero_out.cc:1:
c:\mingw\include\stdint.h:62:15: note: previous declaration as 'typedef int int32_t'
 typedef int   int32_t;
               ^~~~~~~
In file included from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:0,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/tensor.h:22,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/device_base.h:26,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_kernel.h:27,
                 from zero_out.cc:2:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/unsupported/Eigen/CXX11/Tensor:45:26: error: conflicting declaration 'typedef long unsigned int uint32_t'
 typedef unsigned __int32 uint32_t;
                          ^~~~~~~~
In file included from c:\mingw\lib\gcc\mingw32\6.3.0\include\stdint.h:9:0,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\cstdint:41,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\char_traits.h:420,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\string:40,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\stdexcept:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\array:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\tuple:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\functional:55,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op.h:19,
                 from zero_out.cc:1:
c:\mingw\include\stdint.h:63:19: note: previous declaration as 'typedef unsigned int uint32_t'
 typedef unsigned  uint32_t;
                   ^~~~~~~~
In file included from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:0,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/tensor_shape.h:21,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/tensor.h:24,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/device_base.h:26,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_kernel.h:27,
                 from zero_out.cc:2:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/unsupported/Eigen/CXX11/Tensor:44:17: error: conflicting declaration 'typedef long int int32_t'
 typedef __int32 int32_t;
                 ^~~~~~~
In file included from c:\mingw\lib\gcc\mingw32\6.3.0\include\stdint.h:9:0,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\cstdint:41,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\char_traits.h:420,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\string:40,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\stdexcept:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\array:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\tuple:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\functional:55,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op.h:19,
                 from zero_out.cc:1:
c:\mingw\include\stdint.h:62:15: note: previous declaration as 'typedef int int32_t'
 typedef int   int32_t;
               ^~~~~~~
In file included from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:0,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/tensor_shape.h:21,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/tensor.h:24,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/device_base.h:26,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_kernel.h:27,
                 from zero_out.cc:2:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/unsupported/Eigen/CXX11/Tensor:45:26: error: conflicting declaration 'typedef long unsigned int uint32_t'
 typedef unsigned __int32 uint32_t;
                          ^~~~~~~~
In file included from c:\mingw\lib\gcc\mingw32\6.3.0\include\stdint.h:9:0,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\cstdint:41,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\char_traits.h:420,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\string:40,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\stdexcept:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\array:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\tuple:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\functional:55,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op.h:19,
                 from zero_out.cc:1:
c:\mingw\include\stdint.h:63:19: note: previous declaration as 'typedef unsigned int uint32_t'
 typedef unsigned  uint32_t;
                   ^~~~~~~~
In file included from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:0,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/tensor_types.h:19,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/tensor.h:25,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/device_base.h:26,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op_kernel.h:27,
                 from zero_out.cc:2:
C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/unsupported/Eigen/CXX11/Tensor:44:17: error: conflicting declaration 'typedef long int int32_t'
 typedef __int32 int32_t;
                 ^~~~~~~
In file included from c:\mingw\lib\gcc\mingw32\6.3.0\include\stdint.h:9:0,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\cstdint:41,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\char_traits.h:420,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\string:40,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\stdexcept:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\array:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\tuple:39,
                 from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\functional:55,
                 from C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include/tensorflow/core/framework/op.h:19,
                 from zero_out.cc:1:
c:\mingw\include\stdint.h:62:15: note: previous declaration as 'typedef int int32_t'
 typedef int   int32_t;
               ^~~~~~~

考虑到基本zero_out.cc的外观(至少在我的新手眼中),我怀疑主要问题出在其他地方。值得注意的是,我构建现有操作的尝试也引发了相互冲突的声明错误,所以即使我在写作上犯了一些错误zero_out.cc,这也不是问题的全部。根据我的阅读,后来的 C++ 标准据说修复了与变量模板相关的问题,但无论我使用-std=c++11,-std=c++14还是-std=c++17作为调用中的g++选项(在我尝试过的其他选项中),我都得到了相同的确切错误)。看起来也不应该仅仅为了构建一个基本的操作而手动重写一堆标准安装文件......我希望。

可能有一些可笑的简单错误正在逃脱我的掌握,所以对于新手可能提出的一个非常基本的问题,我深表歉意。尽管如此,您可以提供的任何见解都将不胜感激。

(以防万一,我最初尝试从源代码构建 tensorflow,但遇到了 bazel 和 bazelisk 的许多问题。最近,在卸载了我以前的 tensorflow 版本后,我从 安装了 tensorflow pip,至少据我所知. 但是,我不确定我之前的安装尝试留下的任何工件是否会与新安装发生冲突,坦率地说,我对 tensorflow 不够熟悉,甚至不知道如何开始诊断此类一个问题。)

更新:我最终咬紧牙关,只使用 Visual Studio 进行内核编译——尽管我想避免不必要地依赖专有工具,但似乎没有太多选择。如果它对其他人有帮助,以下命令提示符适用于zero_out.cc

cpp -std=c++11 -msse2 -shared "C:/Users/Admin/AppData/Local/Programs/Python/Python38/Lib/site-packages/tensorflow/tensorflow/tensorflow/core/kernels/zero_out.cc" -o "C:/Users/Admin/AppData/Local/Programs/Python/Python38/Lib/site-packages/tensorflow/tensorflow/tensorflow/core/kernels/zero_out.so" -I "C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow\include" -l tensorflow_framework -L "C:\Users\Admin\AppData\Roaming\Python\Python38\site-packages\tensorflow"

话虽如此,我仍然对涉及g++或类似工具的任何潜在解决方案感兴趣,因此我将按原样保留这个问题,以便其他人可以发布他们拥有的任何答案。(此外,虽然上述代码行适用于zero_out.cc,但它导致其他一些内核出现错误。不过,这似乎是一个明显的问题,所以如果我无法解决它,我会将它作为一个单独的问题发布在我的自己的。)

标签: tensorflowg++mingw

解决方案


推荐阅读