c++ - Py ILM Base 无法在 Windows 上编译

标签 c++ windows compilation openexr

我已经从 Latest Open EXR repo 下载了最新的拷贝并毫无问题地编译了大部分内容。但是,当我访问 PyILMBase 时,它​​失败了。

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

Error C2491 'PyImath::FixedArray::name': definition of dllimport function not allowed PyImath (...)\src\pyilmbase-2.2.1\PyImath\PyImath.cpp 41

和对 unistd.h 的导入,这种方式得到解决 Here

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

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

最佳答案

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_EXPORTS 替换为 PYIMATH_EXPORTS

对于 PyIex 来说可能是一样的...

关于c++ - Py ILM Base 无法在 Windows 上编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49867309/

相关文章:

c++ - 如何在C++中取每第n个元素的平均值

c++ - 这个语义调用哪个构造函数?

Windows 应用程序可以选择保持连接到控制台

c# - 在 Windows 中如何从 USB HID 设备获取原始描述符数据?

java - 如何编译多个相互依赖的java文件?

c++ - Linux 中的 sprintf uint64_t

c++ - 无法使用 FindWindowEx 函数找到子窗口

windows - 在 Windows 中从批处理脚本向 txt 文件添加逗号

java - java代码是如何编译的

unix - Cmake 无法工作 - 没有当前工作目录