当前位置: 首页 > 知识库问答 >
问题:

Windows中的协议错误

谈桐
2023-03-14

我正在尝试使用maven protoc插件和我在Cygwin中构建的protoc可执行文件编译协议缓冲区代码。我无法从Cygwin或Windows命令行执行此操作。下面是我在Windows中运行它时得到的输出,但从Cygwin运行时的错误是相同的。我觉得这很奇怪,因为如果问题是路径转换,那么我希望其中一个可以工作。这个可执行文件是用Cygwin的g构建的,这可能会影响到事情吗?(显而易见,该目录确实存在。)

编辑:我得到同样的错误,当我把maven从图片中取出,只是手动调用协议。

编辑2:我可以通过使用相对或绝对路径从Cygwin手动调用协议来解决这个问题(但波浪扩展不起作用)。使用相对或绝对路径从Windows手动调用协议继续会出现相同的错误。

[DEBUG]   (f) outputDirectory = c:\cygwin64\home\dan\code\server\protocol\target\generated-sources\protobuf\java
[DEBUG]   (f) project = MavenProject: server:protocol:1.0-SNAPSHOT @ c:\cygwin64\home\dan\code\server\protocol\pom.xml
[DEBUG]   (f) protoSourceRoot = c:\cygwin64\home\dan\code\server\protocol\src\main\proto
[DEBUG]   (f) protocPluginDirectory = c:\cygwin64\home\dan\code\server\protocol\target\protoc-plugins
[DEBUG]   (f) remoteRepositories = [
      id: central
      url: https://repo.maven.apache.org/maven2
      layout: default snapshots: [enabled => false, update => daily]
      releases: [enabled => true, update => daily]
      ]
[DEBUG]   (f) session = org.apache.maven.execution.MavenSession@24fb6a80
[DEBUG]   (f) skip = false
[DEBUG]   (f) staleMillis = 0
[DEBUG]   (f) temporaryProtoFileDirectory = c:\cygwin64\home\dan\code\server\protocol\target\protoc-dependencies
[DEBUG]   (f) writeDescriptorSet = false
[DEBUG] -- end configuration --
[WARNING] No 'protocExecutable' parameter is configured, using the default: 'protoc'
[DEBUG] Proto source root:
[DEBUG]  c:\cygwin64\home\dan\code\server\protocol\src\main\proto
[DEBUG] [PROTOC] Executable:
[DEBUG] [PROTOC]  protoc
[DEBUG] [PROTOC] Protobuf import paths:
[DEBUG] [PROTOC]  c:\cygwin64\home\dan\code\server\protocol\src\main\proto [DEBUG] [PROTOC] Java output directory:
[DEBUG] [PROTOC]  c:\cygwin64\home\dan\code\server\protocol\target\generated-sources\protobuf\java
[DEBUG] [PROTOC] Protobuf descriptors:
[DEBUG] [PROTOC]  c:\cygwin64\home\dan\code\server\protocol\src\main\proto\message.proto
[DEBUG] [PROTOC] Command line options:
[DEBUG] [PROTOC]
    --proto_path=c:\cygwin64\home\dan\code\server\protocol\src\main\proto
    --java_out=c:\cygwin64\home\dan\code\server\protocol\target\generated-sources\protobuf\java
    c:\cygwin64\home\dan\code\server\protocol\src\main\proto\message.proto
[INFO] Compiling 1 proto file(s) to c:\cygwin64\home\dan\code\server\protocol\target\generated-sources\protobuf\java
[ERROR] PROTOC FAILED: c: warning: directory does not exist. c:\cygwin64\home\dan\code\server\protocol\src\main\proto\message.proto: File does not reside within any path specified using --proto_path (or -I).  You must specify a --proto_path which encompasses this file. Note that the proto_path must be an exact prefix of the .proto file names -- protoc is too dumb to figure out when two paths (e.g. absolute and relative) are equivalent (it's harder than you think).

共有1个答案

堵景天
2023-03-14

您使用Cygwin构建的可执行文件将取决于完整的Cygwin环境,并且无论您如何执行它们,都将表现为Cygwin程序。也就是说,如果您从非Cygwin shell执行Cygwin程序,它仍将表现为Cygwin程序。Cygwin程序不接受使用反斜杠驱动器号的Windows样式路径;您需要使用例如/cygdrive/c/而不是c:\

一般来说,您不应该尝试从非Cygwin shell使用Cygwin编译的命令行工具。相反,请尝试使用MSVC或MinGW构建protoc,或者使用Google提供的预构建Windows二进制文件。

 类似资料:
  • 我试图在Windows上的Qt中使用google协议缓冲区。因此,我使用MingGW的msys从github编译了protobuf源代码。proto编译器(protoc)似乎工作得很好,但遗憾的是,它无法使用生成的。博士和。pb。从Qt环境中抄送文件。 将此添加到我的。pro文件: 但我仍然得到“未定义的引用…”当我试图编译这个类时,它使用了所有的方法。 代码必须正确,因为它在使用protoc和Q

  • Git 可以使用四种主要的协议来传输资料:本地协议(Local),HTTP 协议,SSH(Secure Shell)协议及 Git 协议。 在此,我们将会讨论那些协议及哪些情形应该使用(或避免使用)他们。 本地协议 最基本的就是 本地协议(Local protocol) ,其中的远程版本库就是硬盘内的另一个目录。 这常见于团队每一个成员都对一个共享的文件系统(例如一个挂载的 NFS)拥有访问权,或

  • 协议为方法、属性、以及其他特定的任务需求或功能定义蓝图。协议可被类、结构体、或枚举类型采纳以提供所需功能的具体实现。满足了协议中需求的任意类型都叫做遵循了该协议。 除了指定遵循类型必须实现的要求外,你可以扩展一个协议以实现其中的一些需求或实现一个符合类型的可以利用的附加功能。 协议的语法 定义协议的方式与类、结构体、枚举类型非常相似: protocol SomeProtocol { //

  • 本页包含内容: 协议的语法(Protocol Syntax) 对属性的规定(Property Requirements) 对方法的规定(Method Requirements) 对突变方法的规定(Mutating Method Requirements) 对构造器的规定(Initializer Requirements) 协议类型(Protocols as Types) 委托(代理)模式(Dele

  • 我想实现达特-原型,但是达特-原型-插件(从原型定义生成达特原型库的项目)目前不支持视窗。我找不到插件的替代方案。没有其他方法来生成达特的定义吗?任何建议表示赞赏。

  • 我得到的是“违反协议”。我有一个在RedHat Linux上运行的应用程序,数据库和应用程序共同驻留在机器上。 使用的Oracle版本:Oracle 11g R2(11.2.0.3.0) 使用的JDBC驱动程序:12.1.0.1 使用的Java:JDK1.7.0.65 32位 我遇到过很多论坛,这些论坛都指出这个错误是驱动程序的问题,但在所有这些论坛中,使用的oracle版本较高,而驱动程序版本较