Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build failure on arm64-uwp #173

Closed
JackBoosY opened this issue Oct 19, 2020 · 8 comments
Closed

Build failure on arm64-uwp #173

JackBoosY opened this issue Oct 19, 2020 · 8 comments

Comments

@JackBoosY
Copy link

JackBoosY commented Oct 19, 2020

Hi guys,
I received an issue microsoft/vcpkg#13929 report that cctz failed to build on triplet arm64-uwp.
And I've opened a PR microsoft/vcpkg#14109 to fix that.

Can someone give me some suggestions?

Note: this changes related to PR #145.

Thanks.

@devbww
Copy link
Contributor

devbww commented Oct 19, 2020

Hi,

It is a little difficult to decipher your fix-arm-build.patch through multiple edits, but whatever it produces should serve as a definition of absl::time_internal::cctz_extension::zone_info_source_factory. The error in vcpkg#13929 says that it is still unresolved, however.

As you've seen, on Windows this typically requires the use of #pragma comment(linker, "/alternatename:A=B), where A and B are mangled names for absl::time_internal::cctz_extension::zone_info_source_factory and absl::time_internal::cctz_extension::default_factory respectively.

That is zone_info_source_factory is weakly linked to default_factory.

This requires getting the mangled names correct for the platform, which I think is the crux of your problem.

The error message does give the mangled name for zone_info_source_factory, A. That, or some judicious use of nm, might help you confirm what the value for B should be.

From the look of the error, I believe CCTZ has the correct mangled names for _M_ARM64. However, some edits occur when CCTZ is imported into Abseil (to deal with namespace changes), so perhaps something is going awry there.

@JackBoosY
Copy link
Author

JackBoosY commented Oct 20, 2020

@devbww Thanks for reply!
I want to confirm if we should use the first alternatename when we build ʻarm86`:

#if defined(_M_IX86)
#pragma comment( \
linker, \
"/alternatename:?zone_info_source_factory@cctz_extension@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@@U?$default_delete@VZoneInfoSource@cctz@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@ABV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@@U?$default_delete@VZoneInfoSource@cctz@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@3@@ZA=?default_factory@cctz_extension@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@@U?$default_delete@VZoneInfoSource@cctz@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@ABV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@@U?$default_delete@VZoneInfoSource@cctz@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@3@@ZA")

Now, the only thing I can confirm is that when building arm64, we need to use the second alternatename:

#elif defined(_M_IA_64) || defined(_M_AMD64) || defined(_M_ARM) || \
defined(_M_ARM64)
#pragma comment( \
linker, \
"/alternatename:?zone_info_source_factory@cctz_extension@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@@U?$default_delete@VZoneInfoSource@cctz@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@AEBV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@@U?$default_delete@VZoneInfoSource@cctz@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@3@@ZEA=?default_factory@cctz_extension@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@@U?$default_delete@VZoneInfoSource@cctz@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@AEBV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@@U?$default_delete@VZoneInfoSource@cctz@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@3@@ZEA")

@devbww
Copy link
Contributor

devbww commented Oct 20, 2020

I want to confirm if we should use the first alternatename when we build arm86

I'm afraid I don't know for sure (I've never done an ARM build), but #694 implied that the _M_ARM and _M_ARM64 cases should be the same.

Now, the only thing I can confirm is that when building arm64, we need to use the second alternatename

That sounds right, but isn't that the status quo? And that makes me wonder how you got an error in the first place.

Thanks for any help you can provide in clearing this up.

@JackBoosY
Copy link
Author

JackBoosY commented Oct 20, 2020

In PR microsoft/vcpkg#11827, I patched zone_info_source.cc, change line

#if defined(_M_IX86)

to

#if defined(_M_IX86) || ((defined(_M_ARM) || defined(_M_ARM64)) && defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP))

and use the official changes with line

#elif defined(_M_IA_64) || defined(_M_AMD64) || defined(_M_ARM) || \
defined(_M_ARM64)

The result shows us:

5>time_zone_info.obj : error LNK2001: unresolved external symbol "class std::unique_ptr<class absl::time_internal::cctz::ZoneInfoSource,struct std::default_delete<class absl::time_internal::cctz::ZoneInfoSource> > (__cdecl* absl::time_internal::cctz_extension::zone_info_source_factory)(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::function<class std::unique_ptr<class absl::time_internal::cctz::ZoneInfoSource,struct std::default_delete<class absl::time_internal::cctz::ZoneInfoSource> > __cdecl(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)> const &)" (?zone_info_source_factory@cctz_extension@time_internal@absl@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@5@AEBV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@std@@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@5@@ZEA) [C:\Users\ComputerName\testx\ProjectForWindows\vcpkg\buildtrees\abseil\arm64-uwp-dbg\absl\abseil_dll.vcxproj]

According to the unmodified macro in the source code, the author meant that the first alternatename should be used in all x86 and the second alternatename should be used in x64.

And if I use the second alternatename when building arm, I received error message:

[101/117] cmd.exe /C "cmd.exe /C "F:\vcpkg\downloads\tools\cmake-3.18.4-windows\cmake-3.18.4-win32-x86\bin\cmake.exe -E __create_def F:\vcpkg\buildtrees\abseil\arm-windows-dbg\absl\CMakeFiles\abseil_dll.dir\.\exports.def F:\vcpkg\buildtrees\abseil\arm-windows-dbg\absl\CMakeFiles\abseil_dll.dir\.\exports.def.objs && cd F:\vcpkg\buildtrees\abseil\arm-windows-dbg" && F:\vcpkg\downloads\tools\cmake-3.18.4-windows\cmake-3.18.4-win32-x86\bin\cmake.exe -E vs_link_dll --intdir=absl\CMakeFiles\abseil_dll.dir --rc="C:\PROGRA~2\Windows Kits\10\bin\10.0.19041.0\x64\rc.exe" --mt="C:\PROGRA~2\Windows Kits\10\bin\10.0.19041.0\x64\mt.exe" --manifests  -- "C:\PROGRA~2\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\bin\Hostx64\arm\link.exe"  absl\CMakeFiles\abseil_dll.dir\base\dynamic_annotations.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\cycleclock.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\exponential_biased.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\low_level_alloc.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\periodic_sampler.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\raw_logging.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\scoped_set_env.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\spinlock.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\spinlock_wait.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\sysinfo.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\thread_identity.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\throw_delegate.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\unscaledcycleclock.cc.obj absl\CMakeFiles\abseil_dll.dir\base\log_severity.cc.obj absl\CMakeFiles\abseil_dll.dir\container\internal\hashtablez_sampler.cc.obj absl\CMakeFiles\abseil_dll.dir\container\internal\hashtablez_sampler_force_weak_definition.cc.obj absl\CMakeFiles\abseil_dll.dir\container\internal\raw_hash_set.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\failure_signal_handler.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\leak_check_disable.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\stacktrace.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\symbolize.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\address_is_readable.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\demangle.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\elf_mem_image.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\examine_stack.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\stack_consumption.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\vdso_support.cc.obj absl\CMakeFiles\abseil_dll.dir\hash\internal\city.cc.obj absl\CMakeFiles\abseil_dll.dir\hash\internal\hash.cc.obj absl\CMakeFiles\abseil_dll.dir\numeric\int128.cc.obj absl\CMakeFiles\abseil_dll.dir\random\discrete_distribution.cc.obj absl\CMakeFiles\abseil_dll.dir\random\gaussian_distribution.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\gaussian_distribution_gentables.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\pool_urbg.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\randen.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\randen_detect.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\randen_hwaes.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\randen_slow.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\seed_material.cc.obj absl\CMakeFiles\abseil_dll.dir\random\seed_gen_exception.cc.obj absl\CMakeFiles\abseil_dll.dir\random\seed_sequences.cc.obj absl\CMakeFiles\abseil_dll.dir\status\status.cc.obj absl\CMakeFiles\abseil_dll.dir\status\status_payload_printer.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\ascii.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\charconv.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\cord.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\escaping.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\charconv_bigint.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\charconv_parse.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\match.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\numbers.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\str_cat.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\str_replace.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\str_split.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\string_view.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\substitute.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\escaping.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\memutil.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\ostringstream.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\pow10_helper.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\arg.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\bind.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\extension.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\float_conversion.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\output.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\parser.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\utf8.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\barrier.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\blocking_counter.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\mutex.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\notification.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\internal\create_thread_identity.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\internal\graphcycles.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\internal\per_thread_sem.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\internal\waiter.cc.obj absl\CMakeFiles\abseil_dll.dir\time\civil_time.cc.obj absl\CMakeFiles\abseil_dll.dir\time\clock.cc.obj absl\CMakeFiles\abseil_dll.dir\time\duration.cc.obj absl\CMakeFiles\abseil_dll.dir\time\format.cc.obj absl\CMakeFiles\abseil_dll.dir\time\time.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\civil_time_detail.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_fixed.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_format.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_if.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_impl.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_info.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_libc.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_lookup.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_posix.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\zone_info_source.cc.obj absl\CMakeFiles\abseil_dll.dir\types\bad_any_cast.cc.obj absl\CMakeFiles\abseil_dll.dir\types\bad_optional_access.cc.obj absl\CMakeFiles\abseil_dll.dir\types\bad_variant_access.cc.obj  /out:bin\abseil_dll.dll /implib:absl\abseil_dll.lib /pdb:bin\abseil_dll.pdb /dll /version:0.0 /machine:ARM /nologo    /debug /INCREMENTAL  /DEF:absl\CMakeFiles\abseil_dll.dir\.\exports.def  -ignore:4221  kernel32.lib user32.lib  && cd ."
FAILED: bin/abseil_dll.dll absl/abseil_dll.lib 
cmd.exe /C "cmd.exe /C "F:\vcpkg\downloads\tools\cmake-3.18.4-windows\cmake-3.18.4-win32-x86\bin\cmake.exe -E __create_def F:\vcpkg\buildtrees\abseil\arm-windows-dbg\absl\CMakeFiles\abseil_dll.dir\.\exports.def F:\vcpkg\buildtrees\abseil\arm-windows-dbg\absl\CMakeFiles\abseil_dll.dir\.\exports.def.objs && cd F:\vcpkg\buildtrees\abseil\arm-windows-dbg" && F:\vcpkg\downloads\tools\cmake-3.18.4-windows\cmake-3.18.4-win32-x86\bin\cmake.exe -E vs_link_dll --intdir=absl\CMakeFiles\abseil_dll.dir --rc="C:\PROGRA~2\Windows Kits\10\bin\10.0.19041.0\x64\rc.exe" --mt="C:\PROGRA~2\Windows Kits\10\bin\10.0.19041.0\x64\mt.exe" --manifests  -- "C:\PROGRA~2\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\bin\Hostx64\arm\link.exe"  absl\CMakeFiles\abseil_dll.dir\base\dynamic_annotations.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\cycleclock.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\exponential_biased.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\low_level_alloc.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\periodic_sampler.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\raw_logging.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\scoped_set_env.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\spinlock.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\spinlock_wait.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\sysinfo.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\thread_identity.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\throw_delegate.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\unscaledcycleclock.cc.obj absl\CMakeFiles\abseil_dll.dir\base\log_severity.cc.obj absl\CMakeFiles\abseil_dll.dir\container\internal\hashtablez_sampler.cc.obj absl\CMakeFiles\abseil_dll.dir\container\internal\hashtablez_sampler_force_weak_definition.cc.obj absl\CMakeFiles\abseil_dll.dir\container\internal\raw_hash_set.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\failure_signal_handler.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\leak_check_disable.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\stacktrace.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\symbolize.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\address_is_readable.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\demangle.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\elf_mem_image.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\examine_stack.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\stack_consumption.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\vdso_support.cc.obj absl\CMakeFiles\abseil_dll.dir\hash\internal\city.cc.obj absl\CMakeFiles\abseil_dll.dir\hash\internal\hash.cc.obj absl\CMakeFiles\abseil_dll.dir\numeric\int128.cc.obj absl\CMakeFiles\abseil_dll.dir\random\discrete_distribution.cc.obj absl\CMakeFiles\abseil_dll.dir\random\gaussian_distribution.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\gaussian_distribution_gentables.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\pool_urbg.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\randen.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\randen_detect.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\randen_hwaes.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\randen_slow.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\seed_material.cc.obj absl\CMakeFiles\abseil_dll.dir\random\seed_gen_exception.cc.obj absl\CMakeFiles\abseil_dll.dir\random\seed_sequences.cc.obj absl\CMakeFiles\abseil_dll.dir\status\status.cc.obj absl\CMakeFiles\abseil_dll.dir\status\status_payload_printer.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\ascii.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\charconv.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\cord.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\escaping.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\charconv_bigint.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\charconv_parse.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\match.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\numbers.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\str_cat.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\str_replace.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\str_split.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\string_view.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\substitute.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\escaping.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\memutil.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\ostringstream.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\pow10_helper.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\arg.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\bind.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\extension.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\float_conversion.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\output.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\parser.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\utf8.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\barrier.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\blocking_counter.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\mutex.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\notification.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\internal\create_thread_identity.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\internal\graphcycles.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\internal\per_thread_sem.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\internal\waiter.cc.obj absl\CMakeFiles\abseil_dll.dir\time\civil_time.cc.obj absl\CMakeFiles\abseil_dll.dir\time\clock.cc.obj absl\CMakeFiles\abseil_dll.dir\time\duration.cc.obj absl\CMakeFiles\abseil_dll.dir\time\format.cc.obj absl\CMakeFiles\abseil_dll.dir\time\time.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\civil_time_detail.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_fixed.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_format.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_if.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_impl.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_info.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_libc.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_lookup.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_posix.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\zone_info_source.cc.obj absl\CMakeFiles\abseil_dll.dir\types\bad_any_cast.cc.obj absl\CMakeFiles\abseil_dll.dir\types\bad_optional_access.cc.obj absl\CMakeFiles\abseil_dll.dir\types\bad_variant_access.cc.obj  /out:bin\abseil_dll.dll /implib:absl\abseil_dll.lib /pdb:bin\abseil_dll.pdb /dll /version:0.0 /machine:ARM /nologo    /debug /INCREMENTAL  /DEF:absl\CMakeFiles\abseil_dll.dir\.\exports.def  -ignore:4221  kernel32.lib user32.lib  && cd ."
LINK Pass 1: command "C:\PROGRA~2\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\bin\Hostx64\arm\link.exe absl\CMakeFiles\abseil_dll.dir\base\dynamic_annotations.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\cycleclock.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\exponential_biased.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\low_level_alloc.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\periodic_sampler.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\raw_logging.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\scoped_set_env.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\spinlock.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\spinlock_wait.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\sysinfo.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\thread_identity.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\throw_delegate.cc.obj absl\CMakeFiles\abseil_dll.dir\base\internal\unscaledcycleclock.cc.obj absl\CMakeFiles\abseil_dll.dir\base\log_severity.cc.obj absl\CMakeFiles\abseil_dll.dir\container\internal\hashtablez_sampler.cc.obj absl\CMakeFiles\abseil_dll.dir\container\internal\hashtablez_sampler_force_weak_definition.cc.obj absl\CMakeFiles\abseil_dll.dir\container\internal\raw_hash_set.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\failure_signal_handler.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\leak_check_disable.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\stacktrace.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\symbolize.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\address_is_readable.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\demangle.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\elf_mem_image.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\examine_stack.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\stack_consumption.cc.obj absl\CMakeFiles\abseil_dll.dir\debugging\internal\vdso_support.cc.obj absl\CMakeFiles\abseil_dll.dir\hash\internal\city.cc.obj absl\CMakeFiles\abseil_dll.dir\hash\internal\hash.cc.obj absl\CMakeFiles\abseil_dll.dir\numeric\int128.cc.obj absl\CMakeFiles\abseil_dll.dir\random\discrete_distribution.cc.obj absl\CMakeFiles\abseil_dll.dir\random\gaussian_distribution.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\gaussian_distribution_gentables.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\pool_urbg.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\randen.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\randen_detect.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\randen_hwaes.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\randen_slow.cc.obj absl\CMakeFiles\abseil_dll.dir\random\internal\seed_material.cc.obj absl\CMakeFiles\abseil_dll.dir\random\seed_gen_exception.cc.obj absl\CMakeFiles\abseil_dll.dir\random\seed_sequences.cc.obj absl\CMakeFiles\abseil_dll.dir\status\status.cc.obj absl\CMakeFiles\abseil_dll.dir\status\status_payload_printer.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\ascii.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\charconv.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\cord.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\escaping.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\charconv_bigint.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\charconv_parse.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\match.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\numbers.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\str_cat.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\str_replace.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\str_split.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\string_view.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\substitute.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\escaping.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\memutil.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\ostringstream.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\pow10_helper.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\arg.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\bind.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\extension.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\float_conversion.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\output.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\str_format\parser.cc.obj absl\CMakeFiles\abseil_dll.dir\strings\internal\utf8.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\barrier.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\blocking_counter.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\mutex.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\notification.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\internal\create_thread_identity.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\internal\graphcycles.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\internal\per_thread_sem.cc.obj absl\CMakeFiles\abseil_dll.dir\synchronization\internal\waiter.cc.obj absl\CMakeFiles\abseil_dll.dir\time\civil_time.cc.obj absl\CMakeFiles\abseil_dll.dir\time\clock.cc.obj absl\CMakeFiles\abseil_dll.dir\time\duration.cc.obj absl\CMakeFiles\abseil_dll.dir\time\format.cc.obj absl\CMakeFiles\abseil_dll.dir\time\time.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\civil_time_detail.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_fixed.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_format.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_if.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_impl.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_info.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_libc.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_lookup.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\time_zone_posix.cc.obj absl\CMakeFiles\abseil_dll.dir\time\internal\cctz\src\zone_info_source.cc.obj absl\CMakeFiles\abseil_dll.dir\types\bad_any_cast.cc.obj absl\CMakeFiles\abseil_dll.dir\types\bad_optional_access.cc.obj absl\CMakeFiles\abseil_dll.dir\types\bad_variant_access.cc.obj /out:bin\abseil_dll.dll /implib:absl\abseil_dll.lib /pdb:bin\abseil_dll.pdb /dll /version:0.0 /machine:ARM /nologo /debug /INCREMENTAL /DEF:absl\CMakeFiles\abseil_dll.dir\.\exports.def -ignore:4221 kernel32.lib user32.lib /MANIFEST /MANIFESTFILE:absl\CMakeFiles\abseil_dll.dir/intermediate.manifest absl\CMakeFiles\abseil_dll.dir/manifest.res" failed (exit code 1120) with the following output:
   Creating library absl\abseil_dll.lib and object absl\abseil_dll.exp
time_zone_info.cc.obj : error LNK2001: unresolved external symbol "class std::unique_ptr<class absl::time_internal::cctz::ZoneInfoSource,struct std::default_delete<class absl::time_internal::cctz::ZoneInfoSource> > (__cdecl* absl::time_internal::cctz_extension::zone_info_source_factory)(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::function<class std::unique_ptr<class absl::time_internal::cctz::ZoneInfoSource,struct std::default_delete<class absl::time_internal::cctz::ZoneInfoSource> > __cdecl(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)> const &)" (?zone_info_source_factory@cctz_extension@time_internal@absl@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@5@ABV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@5@@ZA)
bin\abseil_dll.dll : fatal error LNK1120: 1 unresolved externals

Use command undname ?zone_info_source_factory@cctz_extension@time_internal@absl@@3P6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@5@ABV?$function@$$A6A?AV?$unique_ptr@VZoneInfoSource@cctz@time_internal@absl@@U?$default_delete@VZoneInfoSource@cctz@time_internal@absl@@@std@@@std@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z@5@@ZA in x64 Native tools Command Prompt for VS 2017,
this symbol is:
class std::unique_ptr<class absl::time_internal::cctz::ZoneInfoSource,struct std::default_delete<class absl::time_internal::cctz::ZoneInfoSource> > (__cdecl* absl::time_internal::cctz_extension::zone_info_source_factory)(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::function<class std::unique_ptr<class absl::time_internal::cctz::ZoneInfoSource,struct std::default_delete<class absl::time_internal::cctz::ZoneInfoSource> > __cdecl(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)> const &)

@devbww
Copy link
Contributor

devbww commented Oct 21, 2020

The two blobs you linked to are both against https://github.com/google/cctz, whereas you're building https://github.com/abseil/abseil-cpp, which includes an edited copy of CCTZ. None of the mangled symbol names in the CCTZ code will be appropriate for Abseil because of those edits (which alter the namespace).

I think your best bet at figuring out the right symbols for "arm64-uwp" is to build CCTZ directly. Whatever you figure out and submit to CCTZ in this repo would then be picked up (and edited appropriately) by Abseil. That should forestall your need to make any "fix-arm-build.patch" at all for zone_info_source.cc.

So, does the CCTZ repo build on your platforms?

@JackBoosY
Copy link
Author

Since cctz's dependency benchmark cannot be built in uwp(google/benchmark#661), I cannot test whether cctz is possible to build in arm64-uwp.
So I had to use abseil's internal cctz.

@devbww
Copy link
Contributor

devbww commented Oct 21, 2020

I would have imagined that Abseil also uses google/benchmark, but OK.

In that case I would address the issue entirely within abseil/abseil-cpp. Don't look at the CCTZ repository or its mangled symbol names at all.

The goal remains the same though: find the mangled names for zone_info_source_factory and default_factory.

The Abseil code is a little more convoluted because it uses preprocessor string concatenation to build those mangled symbol names, but, once you compare the unresolved name to the name being generated, any difference should be clear.

This whole thing is predicated on your linker supporting #pragma comment(linker, "/alternatename:A=B) of course.

@JackBoosY
Copy link
Author

So I think this issue is an abseil bug, thanks @devbww for your help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants