【问题标题】:What is the alternative for -fpermssive flag in windows (visual studio)Windows(Visual Studio)中 -fpermissive 标志的替代方法是什么
【发布时间】:2019-09-26 12:55:14
【问题描述】:

我正在使用我们产品代码中的第三方代码(openssl)。在编译代码时,我收到了可以在 Linux (gcc/g++) 中使用 -fpermissive 标志将其抑制为警告的错误。在 Windows 中,我在 Visual Studio (2005) 中遇到了相同的编译错误。想知道可以在 Visual Studio 中使用的 -fpermissive 标志的替代方案来抑制错误。

我尝试在模块属性->C/C++->命令行->附加选项中添加'/fpermissive'、'/Ze'等标志。但这并没有解决问题。

得到如下错误。 ssl/packet_locl.h(429) : error C2440: '=' : cannot convert from 'void *' to 'unsigned char 'Conversion from 'void' to pointer to non-'void' 需要一个显式转换

由于第三方代码出错,我们不能在那里进行任何代码更改。

预期结果:我们需要将此错误抑制为警告,然后继续编译成功。

【问题讨论】:

  • TL;博士:No, you can't just disable hard errors.。您是否使用 C++ 编译器编译 C 代码?如果是这样,则可以解决整个问题(但不能通过抑制错误)。
  • 嗨 Max,是的,我正在用 C 代码 (Openssl) 编译 C++ 代码。您能告诉我如何解决这个问题吗?
  • 那么解决方案是将所有 openssl 内容包装在一个 C 库中,然后使用 C 编译器进行编译。然后,您的 C++ 代码与此包装库(其标头 可传递地包括 ssl/packet_locl.h 等)交互。这可能已经由其他人完成(您肯定不是第一个将 openssl 与 C++ 代码一起使用的人),因此您应该寻找这样的 openssl 的 C++ 绑定。

标签: c++ visual-studio-2005


【解决方案1】:

>>我尝试在模块属性->C/C++->命令行->附加选项中添加'/fpermissive'、'/Ze'等标志。

这是在 gcc 上定义的,你不能在 VS 上使用。这不适合VS。

>>cannot convert from 'void *' to 'unsigned char'从'void'到指向非'void'的指针的转换需要显式转换

这些是由语言定义的错误。您不能忽略这些错误并直接运行程序。它们无法编译。

>>由于第三方代码出错,我们不能在那里进行任何代码更改。

如果你严格遵守使用这些第三方库接口的方法,就不会出现这样的错误。您需要的是修改自己的代码,而不是更改第三方库代码。

【讨论】:

  • 在openssl的头文件中显示错误。当错误在其他模块中时,如何更改模块中的代码。
猜你喜欢
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 2017-10-28
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
相关资源
最近更新 更多