New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.
Starred by 11 users

Issue metadata

Status: Fixed
Owner:
Closed: Feb 2013
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Windows
Pri: 1
Type: Bug

Blocking:
issue 8606



Sign in to add a comment
link

Issue 173911: chrome.dll link failures in installer_util on Win64

Reported by jsc...@chromium.org, Feb 3 2013 Project Member

Issue description

This looks like one of the last blockers for 64-bit chrome.dll (accepting a few CLs I have in flight right now). I don't understand why we'd be getting a linker error because the cc file is in the target source list. Also, it seems a bit odd that chrome.dll would be so tightly coupled to the installer, but I figure there's a good reason. Anyway, I'm not making progress and was hoping for some ideas.

Here's the errors from a ninja build:

[5/6] C:\src\depot_tools\python_bin\python.exe gyp-win-tool link-wrapper environment.x64 link.exe /nologo /IMPLIB:initial\chrome.dll.lib /DLL /OUT:initial\chrome.dll /PDB:initial\chrome.dll.pdb @initial\chrome.dll.rsp && C:\src\depot_tools\python_bin\python.exe gyp-win-tool manifest-wrapper environment.x64 mt.exe -nologo -manifest ..\..\chrome\app\chrome.dll.manifest obj\chrome\chrome_main_dll.chrome.dll.intermediate.manifest -out:initial\chrome.dll.manifest
FAILED: C:\src\depot_tools\python_bin\python.exe gyp-win-tool link-wrapper environment.x64 link.exe /nologo /IMPLIB:initial\chrome.dll.lib /DLL /OUT:initial\chrome.dll /PDB:initial\chrome.dll.pdb @initial\chrome.dll.rsp && C:\src\depot_tools\python_bin\python.exe gyp-win-tool manifest-wrapper environment.x64 mt.exe -nologo -manifest ..\..\chrome\app\chrome.dll.manifest obj\chrome\chrome_main_dll.chrome.dll.intermediate.manifest -out:initial\chrome.dll.manifest
installer_util.google_chrome_distribution.obj : error LNK2001: unresolved external symbol "public: virtual bool __cdecl GoogleChromeDistribution::GetExperimentDetails(struct BrowserDistribution::UserExperiment *,int)" (?GetExperimentDetails@GoogleChromeDistribution@@UEAA_NPEAUUserExperiment@BrowserDistribution@@H@Z)

installer_util.google_chrome_sxs_distribution.obj : error LNK2019: unresolved external symbol "public: virtual bool __cdecl GoogleChromeDistribution::GetExperimentDetails(struct BrowserDistribution::UserExperiment *,int)" (?GetExperimentDetails@GoogleChromeDistribution@@UEAA_NPEAUUserExperiment@BrowserDistribution@@H@Z) referenced in function "private: __cdecl GoogleChromeSxSDistribution::GoogleChromeSxSDistribution(void)" (??0GoogleChromeSxSDistribution@@AEAA@XZ)

installer_util.google_chrome_distribution.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl GoogleChromeDistribution::LaunchUserExperiment(class base::FilePath const &,enum installer::InstallStatus,class Version const &,class installer::Product const &,bool)" (?LaunchUserExperiment@GoogleChromeDistribution@@UEAAXAEBVFilePath@base@@W4InstallStatus@installer@@AEBVVersion@@AEBVProduct@5@_N@Z)

installer_util.google_chrome_sxs_distribution.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl GoogleChromeDistribution::LaunchUserExperiment(class base::FilePath const &,enum installer::InstallStatus,class Version const &,class installer::Product const &,bool)" (?LaunchUserExperiment@GoogleChromeDistribution@@UEAAXAEBVFilePath@base@@W4InstallStatus@installer@@AEBVVersion@@AEBVProduct@5@_N@Z)

installer_util.google_chrome_distribution.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl GoogleChromeDistribution::InactiveUserToastExperiment(int,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &,class installer::Product const &,class base::FilePath const &)" (?InactiveUserToastExperiment@GoogleChromeDistribution@@UEAAXHAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@AEBVProduct@installer@@AEBVFilePath@base@@@Z)

installer_util.google_chrome_sxs_distribution.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl GoogleChromeDistribution::InactiveUserToastExperiment(int,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &,class installer::Product const &,class base::FilePath const &)" (?InactiveUserToastExperiment@GoogleChromeDistribution@@UEAAXHAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@AEBVProduct@installer@@AEBVFilePath@base@@@Z)

installer_util.google_chrome_distribution.obj : error LNK2001: unresolved external symbol "private: virtual bool __cdecl GoogleChromeDistribution::ExtractUninstallMetricsFromFile(class base::FilePath const &,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > *)" (?ExtractUninstallMetricsFromFile@GoogleChromeDistribution@@EEAA_NAEBVFilePath@base@@PEAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z)

installer_util.google_chrome_sxs_distribution.obj : error LNK2001: unresolved external symbol "private: virtual bool __cdecl GoogleChromeDistribution::ExtractUninstallMetricsFromFile(class base::FilePath const &,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > *)" (?ExtractUninstallMetricsFromFile@GoogleChromeDistribution@@EEAA_NAEBVFilePath@base@@PEAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z)

installer_util.google_chrome_distribution.obj : error LNK2001: unresolved external symbol "private: virtual bool __cdecl GoogleChromeDistribution::ExtractUninstallMetrics(class base::DictionaryValue const &,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > *)" (?ExtractUninstallMetrics@GoogleChromeDistribution@@EEAA_NAEBVDictionaryValue@base@@PEAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z)

installer_util.google_chrome_sxs_distribution.obj : error LNK2001: unresolved external symbol "private: virtual bool __cdecl GoogleChromeDistribution::ExtractUninstallMetrics(class base::DictionaryValue const &,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > *)" (?ExtractUninstallMetrics@GoogleChromeDistribution@@EEAA_NAEBVDictionaryValue@base@@PEAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z)

installer_util.google_chrome_distribution.obj : error LNK2001: unresolved external symbol "private: virtual bool __cdecl GoogleChromeDistribution::BuildUninstallMetricsString(class base::DictionaryValue const *,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > *)" (?BuildUninstallMetricsString@GoogleChromeDistribution@@EEAA_NPEBVDictionaryValue@base@@PEAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z)

installer_util.google_chrome_sxs_distribution.obj : error LNK2001: unresolved external symbol "private: virtual bool __cdecl GoogleChromeDistribution::BuildUninstallMetricsString(class base::DictionaryValue const *,class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > *)" (?BuildUninstallMetricsString@GoogleChromeDistribution@@EEAA_NPEBVDictionaryValue@base@@PEAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z)

initial\chrome.dll : fatal error LNK1120: 6 unresolved externals
 

Comment 1 by jsc...@chromium.org, Feb 3 2013

Blocking: chromium:8606

Comment 2 by Deleted ...@, Feb 3 2013

Based on the error messages, installer_util.google_chrome_sxs_distribution.obj looks like it's compiled as 32-bit. It should not be trying to reference a __cdecl function, when x64 uses the __fastcall calling convention.

Comment 3 by jsc...@chromium.org, Feb 4 2013

Wow... I have no idea how I missed that. I should be able to fix it tomorrow.

Comment 4 by laforge@google.com, Feb 4 2013

Labels: Project-Win64

Comment 5 by jsc...@chromium.org, Feb 4 2013

Looking closer, everything is getting compiled x64 and cdecl is just an alias for fastcall on x64. So, back to square one.

Comment 6 by mad@chromium.org, Feb 4 2013

Based on the comment below, extracted from the top of google_chrome_distribution_dummy.cc, I would talk to the native client folks about it :-)

// This file defines dummy implementation of several functions from the
// BrowserDistribution class for Google Chrome. These functions allow 64-bit
// Windows Chrome binary to build successfully. Since this binary is only used
// for Native Client support, most of the install/uninstall functionality is not
// necessary there.

Comment 7 by jsc...@chromium.org, Feb 4 2013

Yep, just found this a little while ago and am currently in the process of rebuilding:
http://code.google.com/searchframe#OAMlx_jo-ck/src/chrome/installer/util/google_chrome_distribution.cc&exact_package=chromium&q=%23ifndef%20_WIN64%20file:installer/util&l=295

I'll just make it conditional on NaCl and Win64, which should fix it. I have to say, so far the craziest build hacks I've seen during the 64-bit port are the ones that were added for NaCl.

Comment 8 by jsc...@chromium.org, Feb 4 2013

Btw, it is interesting how repetition can totally change your frame of mind. I've spent so much time in gyp over the last few months that it took someone else to make me simply check the source files for a bad conditional macro. A few months ago I would have taken the entirely opposite approach.

Comment 9 by bugdroid1@chromium.org, Feb 5 2013

Project Member
The following revision refers to this bug:
    http://src.chromium.org/viewvc/chrome?view=rev&revision=180645

------------------------------------------------------------------------
r180645 | jschuh@chromium.org | 2013-02-05T08:24:17.951036Z

Changed paths:
   M http://src.chromium.org/viewvc/chrome/trunk/src/chrome/installer/util/google_chrome_distribution.cc?r1=180645&r2=180644&pathrev=180645

Add BrowserDistribution support for Win64 build

This was disabled for win64 nNaCl, but NaCl doesn't compile this file.

BUG= 173911 

Review URL: https://chromiumcodereview.appspot.com/12186016
------------------------------------------------------------------------

Comment 10 by jsc...@chromium.org, Feb 10 2013

Status: Fixed

Comment 11 by bugdroid1@chromium.org, Mar 10 2013

Project Member
Labels: -Area-Internals -Internals-Install Cr-Internals-Install Cr-Internals

Comment 12 by bugdroid1@chromium.org, Mar 20 2013

Project Member
Labels: -Project-Win64 Proj-Win64

Comment 13 by bugdroid1@chromium.org, Apr 5 2013

Project Member
Labels: -Cr-Internals-Install Cr-Internals-Installer

Sign in to add a comment