0

我已经从Latest Open EXR repo下载了最新的副本,并且编译了大部分内容,没有任何问题。但是,当我到达 PyILMBase 时,它​​失败了。

我的尝试有两个明显的问题:

错误 C2491 'PyImath::FixedArray::name':不允许定义 dllimport 函数 PyImath (...)\src\pyilmbase-2.2.1\PyImath\PyImath.cpp 41

以及对 unistd.h 的导入,这种情况在这里得到解决

我的问题是,有没有人成功地为 Windows 编译了这个?我找不到有关该编译错误的任何具体信息,这似乎很奇怪。我是否遗漏了 C++ 的工作方式?

该项目广泛使用导致错误 C2491 的任何内容,因此进入和更改它会有点复杂

4

1 回答 1

1

IlmBase 编译为共享库。共享库必须提供它们的函数声明,您的程序才能找到它们。它是通过将它们声明为dllimportdllexport根据情况来执行的。

  • __declspec(dllimport):从 DLL 导入实现,以便您的应用程序可以使用它。
  • __declspec(dllexport):告诉链接器您希望此对象可供其他 DLL 导入。它在创建其他人可以链接到的 DLL 时使用。

这些关键字通常由单个宏处理。在你的情况下PYIMATH_EXPORT

这些行来自PyImathTask.h

#if defined(PYIMATH_EXPORTS)                         // create library  
  #define PYIMATH_EXPORT __declspec(dllexport)  
#else                                                // use library  
  #define PYIMATH_EXPORT __declspec(dllimport)  
#endif

因此,因为您想让这些函数在您的应用程序中可用,您必须添加PYIMATH_EXPORTS作为预处理器定义。

实际上,PyIMath 的属性拼写错误 - 他们把它写成PyImath_EXPORTS- ... 要解决这个问题,在 vs2015 中,请转到 PyImath 的属性 > 配置属性 > C/C++ > 预处理器 > 替换PyImath_EXPORTSPYIMATH_EXPORTS

PyIex 可能是同样的事情......

于 2018-06-13T14:23:34.920 回答