View Issue Details Jump to Notes ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0015849CMakeCMakepublic2015-11-17 16:082016-05-02 08:30
ReporterChris M 
Assigned ToBill Hoffman 
PrioritynormalSeverityminorReproducibilityalways
StatusclosedResolutionfixed 
PlatformVisual Studio 14 Win64OSWindowsOS Version10
Product VersionCMake 3.4 
Target VersionCMake 3.4.1Fixed in VersionCMake 3.4.1 
Summary0015849: Linker failure when WINDOWS_EXPORT_ALL_SYMBOLS and /bigobj are used together in a Win64 build.
DescriptionShared library fails to link when attempting to use CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS when compiled with /bigobj.

Only tested using Visual Studio 14 2015 Win64.

Test project attached.

It appears that printf-family function symbol names are being modified (leading '_' removed) when cmake is processing *.obj into exportall.def.
Steps To ReproduceExtract attached zip.

> mkdir build
> cd build
> cmake ../ -G "Visual Studio 14 2015 Win64" -DBUILD_BIGOBJ=ON
> cmake --build . --release Debug
TagsNo tags attached.
Attached Fileszip file icon windows-symbols-export-all-bigobj.zip [^] (893 bytes) 2015-11-17 16:08

 Relationships

  Notes
(0039895)
Bill Hoffman (manager)
2015-11-19 17:28

Thanks for the report. I found the issue. Here is a patch for the fix:

diff --git a/Source/bindexplib.cxx b/Source/bindexplib.cxx
index 64621e0..e7263ae 100644
--- a/Source/bindexplib.cxx
+++ b/Source/bindexplib.cxx
@@ -422,7 +422,7 @@ DumpFile(const char* filename,
          DumpSymbols<cmANON_OBJECT_HEADER_BIGOBJ, cmIMAGE_SYMBOL_EX>
            symbolDumper((cmANON_OBJECT_HEADER_BIGOBJ*) lpFileBase, symbols,
                         dataSymbols,
- (dosHeader->e_magic == IMAGE_FILE_MACHINE_AMD64));
+ (h->Machine == IMAGE_FILE_MACHINE_AMD64));
          symbolDumper.DumpObjFile();
       } else {
          printf("unrecognized file format in '%s'\n", filename);


Should be in 3.4.1 coming out soon. The problem was /bigobj with 64bit. The code was not determining that it was 64 bit for bigobj and then did not handle leading _ correctly.
(0039897)
Brad King (manager)
2015-11-20 08:55

Fixed in 'master' here:

 Fix auto export symbols for Dlls containing /bigobj for 64bit builds.
 https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=75004280 [^]

It had to be backported to 'release' separately due to a conflict:

 Fix auto export symbols for Dlls containing /bigobj for 64bit builds.
 https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=c7ddc5f4 [^]

The latter has been queued for merge to 'release' for inclusion in 3.4.1.
(0040965)
Robert Maynard (manager)
2016-05-02 08:30

Closing resolved issues that have not been updated in more than 4 months.

 Issue History
Date Modified Username Field Change
2015-11-17 16:08 Chris M New Issue
2015-11-17 16:08 Chris M File Added: windows-symbols-export-all-bigobj.zip
2015-11-17 16:15 Brad King Assigned To => Bill Hoffman
2015-11-17 16:15 Brad King Status new => assigned
2015-11-19 17:28 Bill Hoffman Note Added: 0039895
2015-11-20 08:55 Brad King Note Added: 0039897
2015-11-20 08:55 Brad King Status assigned => resolved
2015-11-20 08:55 Brad King Resolution open => fixed
2015-11-20 08:55 Brad King Fixed in Version => CMake 3.4.1
2015-11-20 08:55 Brad King Target Version => CMake 3.4.1
2015-11-20 08:55 Brad King Description Updated
2016-05-02 08:30 Robert Maynard Note Added: 0040965
2016-05-02 08:30 Robert Maynard Status resolved => closed


Copyright © 2000 - 2018 MantisBT Team