[CMake] VS2010: inconsistent build of DLL on different computers.

Casper Madsen Casper.Madsen at csr.com
Thu Jun 28 06:23:05 EDT 2012


Hi,

Using CMake and Visual Studio 2010exp to build DLLs for use in Wireshark we are seeing inconsistent results. On all our computers the build verdict is successful. Unfortunately it appears that the DLLs are broken when built on some computers - the DLLs can not be loaded.

**** Tool setup ****
CMake version: 2.8.7
Visual Studio Version: 2010 express,
Cygwin and Msys shells

I have compared the build output from a computer that builds working DLLs with the output from a build resulting in broken DLLs.

**** The build output from the "corrupt" builds: ****
Manifest:

  C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe /nologo /verbose /out:"csr_log_proto_ws_1_2_0.dir\Debug\csr_log_proto_ws_1_2_0.dll.embed.manifest" /manifest csr_log_proto_ws_1_2_0.dir\Debug\csr_log_proto_ws_1_2_0.dll.intermediate.manifest

  All outputs are up-to-date.

LinkEmbedManifest:

  All outputs are up-to-date.
  csr_log_proto_ws_1_2_0.vcxproj -> S:\p4\synergy\frw\main\output\vs10\plugin\Debug\csr_log_proto_ws_1_2_0.dll

FinalizeBuildStatus:

  Deleting file "csr_log_proto_ws_1_2_0.dir\Debug\csr_log_proto_ws_1_2_0.unsuccessfulbuild".
  Touching "csr_log_proto_ws_1_2_0.dir\Debug\csr_log_proto_ws_1_2_0.lastbuildstate".


**** The build output from the "functional" builds: ****
Manifest:

  C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe /nologo /verbose /out:"csr_log_proto_ws_1_2_0.dir\Debug\csr_log_proto_ws_1_2_0.dll.embed.manifest" /manifest csr_log_proto_ws_1_2_0.dir\Debug\csr_log_proto_ws_1_2_0.dll.intermediate.manifest

  C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\rc.exe /nologo /fo"csr_log_proto_ws_1_2_0.dir\Debug\csr_log_proto_ws_1_2_0.dll.embed.manifest.res" csr_log_proto_ws_1_2_0.dir\Debug\csr_log_proto_ws_1_2_0_manifest.rc

LinkEmbedManifest:

  C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\link.exe /ERRORREPORT:QUEUE /OUT:"S:\p4\synergy\frw\main\output\vs10\plugin\Debug\csr_log_proto_ws_1_2_0.dll" /INCREMENTAL /NOLOGO kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib "..\..\..\..\..\..\tools\wireshark\wireshark-win32-libs\glib\lib\glib-2.0.lib" "..\..\..\..\..\..\tools\wireshark\wireshark-1.2.0\epan\libwireshark.lib" /MANIFEST /ManifestFile:"csr_log_proto_ws_1_2_0.dir\Debug\csr_log_proto_ws_1_2_0.dll.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"S:\p4\synergy\frw\main\output\vs10\plugin\Debug\csr_log_proto_ws_1_2_0.pdb" /SUBSYSTEM:CONSOLE /STACK:"10000000" /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"S:/p4/synergy/frw/main/output/vs10/lib/Debug/csr_log_proto_ws_1_2_0.lib" /MACHINE:X86 /DLL csr_log_proto_ws_1_2_0.dir\Debug\csr_log_proto_ws_1_2_0.dll.embed.manifest.res

  "csr_log_proto_ws_1_2_0.dir\Debug\packet-utils.obj"
  csr_log_proto_ws_1_2_0.dir\Debug\csr_proto_plugin.obj
  "csr_log_proto_ws_1_2_0.dir\Debug\packet-bccmd.obj"
  "csr_log_proto_ws_1_2_0.dir\Debug\packet-bcsp-slip.obj"
  "csr_log_proto_ws_1_2_0.dir\Debug\packet-bcsp.obj"
  "csr_log_proto_ws_1_2_0.dir\Debug\packet-hqcmd.obj"  /machine:X86 /debug

     Creating library S:/p4/synergy/frw/main/output/vs10/lib/Debug/csr_log_proto_ws_1_2_0.lib and object S:/p4/synergy/frw/main/output/vs10/lib/Debug/csr_log_proto_ws_1_2_0.exp

  csr_log_proto_ws_1_2_0.vcxproj -> S:\p4\synergy\frw\main\output\vs10\plugin\Debug\csr_log_proto_ws_1_2_0.dll

FinalizeBuildStatus:

  Deleting file "csr_log_proto_ws_1_2_0.dir\Debug\csr_log_proto_ws_1_2_0.unsuccessfulbuild".

  Touching "csr_log_proto_ws_1_2_0.dir\Debug\csr_log_proto_ws_1_2_0.lastbuildstate".


**** Steps performed on both computers ****

-          Checkout source from our source control server

-          Create a new (empty) output directory

-          Generate a build system (cmake -G "Visual Studio 10" <path to CMakeLists-file>)

-          Build code (cmake -build .)

Considering that I am performing a completely clean build I am a bit puzzled that the "corrupt" builds reach the conclusion that some part of the build is "up-to-date" in the "manifest" and "LinkEmbedManifest" stages.
We have tried to force a no-parallel build by specifying maxcpucount=1 to VS, but the "corrupt" build still reach the conclusion that some parts are up-to-date and there for skips the resource compiler.

I see the same result building from command line and when building from the IDE. The "corrupt" computer can however produce working DLL's if the configuration is set to "Release" instead of "Debug" (currently "debug" is our default configuration)

Currently I have "functional" builds from two different computers and "corrupt" builds from 2 other computers. It should be noted that the two "corrupt" computers can produce functional DLLs with VS2008.

Am I doing something wrong? Is there something that I need to give special attention when building DLL's with the CMake + VS2010 combination? Is there a CMake option to force the environment to be completely clean during the build process?
Has anyone encountered similar issues? I understand that this can easily be a Visual Studio issue (configuration and/or use of VS)
I am quite puzzled as to why I get working DLLs and corrupt DLLs executing identical operations on different computers. Any guidance will be greatly appreciated.


We have tried the following setups as well:
CMake version: 2.8.7
Visual Studio Version: 2010 express SP1,

CMake version: 2.8.8
Visual Studio Version: 2010 express,

For completeness; the error I get in Wireshark is a pop-up message saying:
Couldn't load module C:\Program Files\Wireshark\plugins\1.2.0\csr_log_proto_ws_1_2_0.dll: `C:\Program Files\Wireshark\plugins\1.2.0\csr_log_proto_ws_1_2_0.dll': The parameter is incorrect.
And the information from the debugger is:
SXS: RtlCreateActivationContext() failed 0xc000000d
LDR: LdrpWalkImportDescriptor() failed to probe C:\Program Files\Wireshark\plugins\1.2.0\csr_log_fw_proto_ws_1_2_10.dll for its manifest, ntstatus 0xc000000d

Best regards,
Casper Madsen
Senior Engineer, Software
Cambridge Silicon Radio Ltd.
Niels Jernes Vej 10
9220 Aalborg Øst
Denmark
Tel: +45 99324122
Fax: +45 99324101




Member of the CSR plc group of companies. CSR plc registered in England and Wales, registered number 4187346, registered office Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom
More information can be found at www.csr.com. Follow CSR on Twitter at http://twitter.com/CSR_PLC and read our blog at www.csr.com/blog
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20120628/30c17336/attachment-0001.htm>


More information about the CMake mailing list