Py ILM Base没有在windows上编译

时间:2018-04-16 22:43:01

标签: c++ windows compilation openexr

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

我的尝试有两个不同的问题:

  

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

以及对unistd.h的导入,即Here

我的问题是,有没有人成功为Windows编译过这个?奇怪的是,我无法找到有关该编译错误的任何具体信息。我错过了C ++的工作方式吗?

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

1 个答案:

答案 0 :(得分: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_EXPORTS替换为PYIMATH_EXPORTS

对于PyIex来说可能是同样的事情......