panda3d
panda3d copied to clipboard
Windows: HarfBuzz >= 2.8.0 fails to link on MSVC 2019/2022
Description
Compiling Panda3D with makepanda.
path\to\python.exe makepanda/makepanda.py --directx-sdk=jun2010 --windows-sdk=10.0.10240 --msvc-version=14.2 --optimize=4 --outputdir=built --nothing --use-python --use-direct --use-gl --use-dx9 --use-tinydisplay --use-openal --use-vorbis --use-ffmpeg --use-swscale --use-squish --use-zlib --use-sse2 --use-eigen --use-png --use-freetype --use-harfbuzz --use-swresample --use-tiff --use-deploytools --use-pandatool --use-egg --override="STDFLOAT_DOUBLE=1"
The build fails with the following message when trying to link against HarfBuzz release 2.8.0 or newer. The last release that works is HarfBuzz 2.7.4. This issue happens when using MSVC 2019 or MSVC 2022. The issue does not persist with MSVC 2015, however, HarfBuzz 3.4.0 is the last release that builds with MSVC 2015.
[ 39%] Linking dynamic library built/bin/libpanda.dll
Creating library built/lib/libpanda.lib and object built/lib/libpanda.exp
Generating code
Finished generating code
harfbuzz.lib(harfbuzz.cc.obj) : error LNK2005: "public: int __cdecl std::_Atomic
_integral<int,4>::fetch_add(int,enum std::memory_order)" (?fetch_add@?$_Atomic_i
ntegral@H$03@std@@QEAAHHW4memory_order@2@@Z) already defined in libp3dtool.lib(l
ibp3dtool.dll)
harfbuzz.lib(harfbuzz.cc.obj) : error LNK2005: "public: int __cdecl std::_Atomic
_storage<int,4>::load(enum std::memory_order)const " (?load@?$_Atomic_storage@H$
03@std@@QEBAHW4memory_order@2@@Z) already defined in libp3dtool.lib(libp3dtool.d
ll)
built\bin\libpanda.dll : fatal error LNK1169: one or more multiply defined symbo
ls found
Storing dependency cache.
Elapsed Time: 17 min 21 sec
The following command returned a non-zero value: link /nologo /NOD:MFC90.LIB /N
OD:MFC80.LIB /NOD:LIBCMT /NOD:LIBCI.LIB /DEBUG /nod:libc /nod:libcmtd /nod:atlth
unk /nod:atls /nod:atlsd /DLL /MAP:NUL /LTCG /NOD:MSVCRTD.LIB /NOD:MSVCPRTD.LIB
/NOD:MSVCIRTD.LIB /FIXED:NO /OPT:REF /STACK:4194304 /INCREMENTAL:NO /OUT:built/
bin/libpanda.dll /NOD:python38.lib /SUBSYSTEM:CONSOLE,6.00 /IMPLIB:built/lib/lib
panda.lib /LIBPATH:thirdparty/win-python3.8-x64/libs built/tmp/panda_panda.obj b
uilt/tmp/p3recorder_composite1.obj built/tmp/p3recorder_composite2.obj built/tmp
/p3pgraphnodes_composite1.obj built/tmp/p3pgraphnodes_composite2.obj built/tmp/p
3pgraph_nodePath.obj built/tmp/p3pgraph_composite1.obj built/tmp/p3pgraph_compos
ite2.obj built/tmp/p3pgraph_composite3.obj built/tmp/p3pgraph_composite4.obj bui
lt/tmp/p3cull_composite1.obj built/tmp/p3cull_composite2.obj built/tmp/p3movies_
composite1.obj built/tmp/p3grutil_multitexReducer.obj built/tmp/p3grutil_composi
te1.obj built/tmp/p3grutil_composite2.obj built/tmp/p3chan_composite1.obj built/
tmp/p3chan_composite2.obj built/tmp/p3pstatclient_composite1.obj built/tmp/p3pst
atclient_composite2.obj built/tmp/p3char_composite1.obj built/tmp/p3char_composi
te2.obj built/tmp/p3collide_composite1.obj built/tmp/p3collide_composite2.obj bu
ilt/tmp/p3device_composite1.obj built/tmp/p3device_composite2.obj built/tmp/p3dg
raph_composite1.obj built/tmp/p3dgraph_composite2.obj built/tmp/p3display_graphi
csStateGuardian.obj built/tmp/p3display_composite1.obj built/tmp/p3display_compo
site2.obj built/tmp/p3pipeline_composite1.obj built/tmp/p3pipeline_composite2.ob
j built/tmp/p3pipeline_contextSwitch.obj built/tmp/p3event_composite1.obj built/
tmp/p3event_composite2.obj built/tmp/p3gobj_composite1.obj built/tmp/p3gobj_comp
osite2.obj built/tmp/p3gsgbase_composite1.obj built/tmp/p3linmath_composite1.obj
built/tmp/p3linmath_composite2.obj built/tmp/p3mathutil_composite1.obj built/tm
p/p3mathutil_composite2.obj built/tmp/p3parametrics_composite1.obj built/tmp/p3p
arametrics_composite2.obj built/tmp/p3pnmimagetypes_composite1.obj built/tmp/p3p
nmimagetypes_composite2.obj built/tmp/p3pnmimage_composite1.obj built/tmp/p3pnmi
mage_composite2.obj built/tmp/p3text_composite1.obj built/tmp/p3text_composite2.
obj built/tmp/p3tform_composite1.obj built/tmp/p3tform_composite2.obj built/tmp/
p3putil_composite1.obj built/tmp/p3putil_composite2.obj built/tmp/p3audio_compos
ite1.obj built/tmp/p3pgui_composite1.obj built/tmp/p3pgui_composite2.obj built/t
mp/p3pandabase_pandabase.obj built/lib/libpandaexpress.lib built/lib/libp3dtoolc
onfig.lib built/lib/libp3dtool.lib built/tmp/p3net_composite1.obj built/tmp/p3ne
t_composite2.obj built/tmp/p3nativenet_composite1.obj built/tmp/p3pnmimage_conve
rt_srgb_sse2.obj built/tmp/p3pnmtext_composite1.obj wsock32.lib ws2_32.lib user3
2.lib winmm.lib gdi32.lib advapi32.lib iphlpapi.lib setupapi.lib thirdparty/win-
libs-vc14-x64/png/lib/libpng16_static.lib thirdparty/win-libs-vc14-x64/tiff/lib/
tiff.lib thirdparty/win-libs-vc14-x64/zlib/lib/zlibstatic.lib thirdparty/win-lib
s-vc14-x64/freetype/lib/freetype.lib thirdparty/win-libs-vc14-x64/harfbuzz/lib/h
arfbuzz.lib thirdparty/win-libs-vc14-x64/squish/lib/squish.lib thirdparty/win-li
bs-vc14-x64/vorbis/lib/ogg.lib thirdparty/win-libs-vc14-x64/vorbis/lib/vorbis.li
b thirdparty/win-libs-vc14-x64/vorbis/lib/vorbisfile.lib
Build terminated.
Steps to Reproduce
See above.
Environment
- Operating system: Windows 8.1 and Windows 10
- System architecture: both x86 (32-bit) and x86_64 (64-bit)
- Panda3D version: current git master 583f7366db786ff750d77fb8ff09fd3c5718db1c and c6ed5acdc22f5321e1fe5ce7421293abd7d95a26 for MSVC 2015
- Installation method: from source
- Python version (if using Python): 3.8.20
- Compiler (if using C++): MSVC 2019 and MSVC 2022
I tried both HarfBuzz 2.8.2 and 8.5.0 and have no problems linking them with Panda. Using MSVC 2022.
Closing since I can't repro.