From: Robert F. <ro...@fe...> - 2010-02-20 14:47:29
|
Hi, I am having a problem getting VXL to work with VC++ 9.0 SP1 ('Express'). When configuring with CMake, I am getting errors about dlls not being found, mostly 'msvcr90d.dll'. What I have been able to figure out so far is this: VC 2008 SP1 creates manifest files which reference an older version of the runtime library, but *does not install it*. One can get a redist package containing the old release versions of the dlls, but not the debug versions. Thus, since CMake launches its test programs during configuration from 'outside' the studio (in a debugging session the studio seems to force the use of its newer dlls), the system complains (correctly) that dlls are missing. The only way that I found to make the compiler link to the newer libs is by setting _BIND_TO_CURRE NT_CRT_VERSION=1; there is *no* global behaviour switch in VC9 that I know of (sigh). I see two possible workarounds, but do not quite know how to implement them. (1) make CMake launch test executables during configuration using the 'Release' config of VC++ (which should work after the older redist package is installed) or (2) Make CMake issue _BIND_TO_CURRENT_CRT_VERSION=1 for the test executables. In both cases I am a bit stumped about how to achieve this; the VXL configuration files are quite large. I did not find anything in the build instructions of 1.13 either; or am I missing something? Thanks in advance. Regards, Robert |
From: YuLianqing <yu...@li...> - 2010-02-21 17:24:47
|
Hi, Robert I use the same software (VC++ 2008 Express and CMake) as yours but did not see anything wrong. I guess you might build CMake from its source code and there were something wrong with CMake configurations. "msvcr90d.dll is not found" is an old issue that plagued Windows developers for years. Try Bing with this phrase for solutions. You might also try pre-compiled CMake. Lianqing 2010-2-21 ---------------------------------------- > Date: Sat, 20 Feb 2010 15:48:05 +0100 > From: ro...@fe... > To: vxl...@li... > Subject: [Vxl-users] Building with VC++ 9.0 SP1 > > Hi, > > I am having a problem getting VXL to work with VC++ 9.0 SP1 > ('Express'). When configuring with CMake, I am getting errors > about dlls not being found, mostly 'msvcr90d.dll'. > > What I have been able to figure out so far is this: VC 2008 SP1 > creates manifest files which reference an older version of the > runtime library, but *does not install it*. One can get a redist > package containing the old release versions of the dlls, but not > the debug versions. Thus, since CMake launches its test programs > during configuration from 'outside' the studio (in a debugging > session the studio seems to force the use of its newer dlls), > the system complains (correctly) that dlls are missing. > > The only way that I found to make the compiler link to the newer > libs is by setting _BIND_TO_CURRE NT_CRT_VERSION=1; there is > *no* global behaviour switch in VC9 that I know of (sigh). > > I see two possible workarounds, but do not quite know how to > implement them. (1) make CMake launch test executables during > configuration using the 'Release' config of VC++ (which should > work after the older redist package is installed) or (2) Make > CMake issue _BIND_TO_CURRENT_CRT_VERSION=1 for the test > executables. In both cases I am a bit stumped about how to > achieve this; the VXL configuration files are quite large. > > I did not find anything in the build instructions of 1.13 > either; or am I missing something? Thanks in advance. > > Regards, > Robert > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > Vxl-users mailing list > Vxl...@li... > https://lists.sourceforge.net/lists/listinfo/vxl-users _________________________________________________________________ SkyDrive电子画册,带你领略精彩照片,分享“美”时“美”刻! http://www.windowslive.cn/campaigns/e-magazine/ngmchina/?a=c |
From: Robert F. <ro...@fe...> - 2010-02-21 18:35:54
|
And thus spake YuLianqing <yu...@li...> Mon, 22 Feb 2010 01:12:07 +0800: > I use the same software (VC++ 2008 Express and CMake) as yours but did not see anything wrong. > I guess you might build CMake from its source code and there were something wrong with CMake configurations. "msvcr90d.dll is not found" is an old issue that plagued Windows developers for years. Try Bing with this phrase for solutions. You might also try pre-compiled CMake. You misunderstand my problem. I am trying to build VXL (this being the VXL mailing list) using pre-built CMake 2.8 for Windows. When trying to configure the VXL build directory with CMake, I am getting those errors. When I stop the process there and look inside the directory where the cmTryCompileExec test executable is build, I see in the manifest a reference to msvcr90d.dll 9.0.21022.8 (which belongs to VC++ 9.0 RTM) rather than 9.0.30729.1 (which is the one that is being shipped with SP1). This is even documented behaviour for VS 2008 SP1, and it is usually no big deal provided you have a single project and start debug executables only from the IDE (i.e. in the debugger). If you try to run a debug executable from outside the IDE you get the problem that 9.0.21022.8 simply *is not installed*. So the 'Side by Side' mechanism (a.k.a. 'DLL hell 2.0') refuses to run the test .exe. Since installing the 9.0.21022.8 debug libraries in WinSxS "by hand" is more or less impossible, and one cannot get a redist installer for them either, the only possibilities are (1) to make CMake execute the 'try_compile' statements in Release rather than Debug mode (since for Release one *can* get the old libraries), or (2) to force the studio compiler to link to the new version (which is only possible by issuing _BIND_TO_CURRENT_CRT_VERSION), which would *both* require changes to the VXL build scripts. And I have absolutely no idea which ones, hence my original question. Regards, Robert PS: If you have a machine where the old libraries are installed, maybe you have had an older version of VS 2008 (non-SP1) installed before. In that case, consider yourself lucky. |
From: Amitha P. <ami...@us...> - 2010-02-22 05:29:45
|
Robert Fendt wrote: [...] > (2) to force the studio compiler to link to the > new version (which is only possible by issuing > _BIND_TO_CURRENT_CRT_VERSION), which would *both* require > changes to the VXL build scripts. Since you are using CMake, try turning on the "advanced" variables in the GUI. Look for CMAKE_CXX_FLAGS_DEBUG and CMAKE_C_FLAGS_DEBUG. To each of these variables, append the string "/D_BIND_TO_CURRENT_CRT_VERSION". This should cause this preprocessor macro to be defined for all files, including the platform tests. Amitha. |