|
From: | Michael Reinhardt |
Subject: | [Openexr-devel] [Half] HalfTest Failure |
Date: | Fri, 24 May 2013 10:26:50 +0200 |
User-agent: | Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130509 Thunderbird/17.0.6 |
Hi, I reopen the thread from 2013/04/24 started by Peshala Pahalawatta (http://lists.nongnu.org/archive/html/openexr-devel/2013-04/msg00062.html) in order to suggest a solution to the problem. I also had the problem of the failing HalfTest project. I'm using Win7 with VS2010. (I downloaded the VC9 project files from the repository and updated them.) I compiled Half and HalfTest in Debug,Release & Win32,x64. With every test run I got the same error as Peshala, but I found some ways to fix this problem. 1. Don't export the look-up tables. One suggestion is to remove the inline parameter from "half::half (float f)" and "half::operator float () const" and to move the definition to half.cpp. As a result, you can savely remove the HALF_EXPORT keyword from half::_toFloat and half::_eLut in half.h and half.cpp. Doing this, will most probably affect the performance of the half datatype. 2. Compile Half as static library. There are some tutorials on the internet how to achieve this. (e.g. http://www.fixstars.com/en/lucille/docs/dev/index.php/How_to_build_OpenEXR_libs_for_Win_64bit) This confirms Peshala's suggestion that the export declarations are messed up. 3. Correct the export definition in halfExport.h. As Peshala correctly stated, the PLATFORM_WINDOWS keyword is never defined in the VS project files. The other base libraries as IlmThread use another way to define their *EXPORT keyword (,which work flawlessly). I simply adjusted their definition to the half project. As a result you will get this content for halfExport.h (remove every other line of code). #if defined(OPENEXR_DLL) #if defined(HALF_EXPORTS) #define HALF_EXPORT __declspec(dllexport) #define HALF_EXPORT_CONST extern __declspec(dllexport) #else #define HALF_EXPORT __declspec(dllimport) #define HALF_EXPORT_CONST extern __declspec(dllimport) #endif #else #define HALF_EXPORT #define HALF_EXPORT_CONST extern const #endif Additionally, you should check the VS project files for the correct definition of OPENEXR_DLL (Half and HalfTest) and HALF_EXPORT (only Half). I prefer the last solution, but I let the maintainer decide which one to choose. (Btw, the Iex project has the same incorrectly used export definition.) Best regards, Michael ----- visit us at |
[Prev in Thread] | Current Thread | [Next in Thread] |