This concerns libc++-16-dev-wasm32 1:16.0.6-10 in Ubuntu mantic, and also applies to libc++-15-dev-wasm32 1:15.0.7-3ubuntu0.23.04.1 in Ubuntu lunar. (Both are the default versions for each respective release.)
In the course of building Firefox, I encountered this error:
If we look inside the WASI libc++ library for __cxa_allocate_exception (as just one example), we see several references to it and no definitions, just as the linker is complaining:
$ llvm-nm -A /usr/lib/wasm32-wasi/libc++.a | grep __cxa_allocate_exception
/usr/lib/wasm32-wasi/libc++.a:cxa_aux_runtime.cpp.o: U __cxa_allocate_exception
/usr/lib/wasm32-wasi/libc++.a:cxa_vector.cpp.o: U __cxa_allocate_exception
/usr/lib/wasm32-wasi/libc++.a:stdlib_new_delete.cpp.o: U __cxa_allocate_exception
/usr/lib/wasm32-wasi/libc++.a:atomic.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:barrier.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:condition_variable.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:condition_variable_destructor.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:future.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:hash.cpp.o: U __cxa_allocate_exception
/usr/lib/wasm32-wasi/libc++.a:mutex_destructor.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:new.cpp.o: U __cxa_allocate_exception
/usr/lib/wasm32-wasi/libc++.a:shared_mutex.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:string.cpp.o: U __cxa_allocate_exception
/usr/lib/wasm32-wasi/libc++.a:thread.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:typeinfo.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:system_error.cpp.o: U __cxa_allocate_exception
/usr/lib/wasm32-wasi/libc++.a:vector.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:valarray.cpp.o: U __cxa_allocate_exception
/usr/lib/wasm32-wasi/libc++.a:ios.cpp.o: U __cxa_allocate_exception
/usr/lib/wasm32-wasi/libc++.a:ios.instantiations.cpp.o: U __cxa_allocate_exception
/usr/lib/wasm32-wasi/libc++.a:locale.cpp.o: U __cxa_allocate_exception
Here is that same command, run on Debian unstable:
$ llvm-nm -A /usr/lib/wasm32-wasi/libc++.a | grep __cxa_allocate_exception
/usr/lib/wasm32-wasi/libc++.a:atomic.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:barrier.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:condition_variable.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:condition_variable_destructor.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:future.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:mutex_destructor.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:shared_mutex.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:thread.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:typeinfo.cpp.o: no symbols
/usr/lib/wasm32-wasi/libc++.a:vector.cpp.o: no symbols
I don't get the link error on Debian unstable. Something is wrong with how the WASI C++ library is being built for Ubuntu.
This concerns libc++- 16-dev- wasm32 1:16.0.6-10 in Ubuntu mantic, and also applies to libc++- 15-dev- wasm32 1:15.0. 7-3ubuntu0. 23.04.1 in Ubuntu lunar. (Both are the default versions for each respective release.)
In the course of building Firefox, I encountered this error:
----begin build log excerpt---- 117.0/build- browser/ security/ rlbox' rlbox/rlbox. wasm bin/clang+ + --target= wasm32- wasi -o rlbox.wasm -Wl,--export-all -Wl,--stack-first -Wl,-z, stack-size= 262144 -Wl,--no-entry -Wl,--growable- table -Wl,--import-memory -Wl,--import-table ogg_alloc.wasm ogg_bitwise.wasm ogg_framing.wasm xmlparse.wasm xmlrole.wasm xmltok.wasm wasm2c_ sandbox_ wrapper. wasm mozHunspellRLBo xSandbox. wasm affentry.wasm affixmgr.wasm csutil.wasm hashmgr.wasm hunspell.wasm phonet.wasm replist.wasm suggestmgr.wasm GraphiteExtra.wasm CmapCache.wasm Code.wasm Collider.wasm Decompressor.wasm Face.wasm FeatureMap.wasm Font.wasm GlyphCache.wasm GlyphFace.wasm Intervals.wasm Justifier.wasm NameTable.wasm Pass.wasm Position.wasm Segment.wasm Silf.wasm Slot.wasm Sparse.wasm TtfUtil.wasm UtfCodec.wasm call_machine.wasm gr_char_info.wasm gr_face.wasm gr_features.wasm gr_font.wasm gr_segment.wasm gr_slot.wasm mozalloc.wasm RLBoxWOFF2Sandb ox.wasm table_tags.wasm variable_ length. wasm woff2_common.wasm woff2_dec.wasm woff2_out.wasm -lwasi- emulated- process- clocks wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_allocate_ exception wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_throw wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_allocate_ exception wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_throw wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_allocate_ exception wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_throw wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_allocate_ exception wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_throw wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_allocate_ exception wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_throw wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_allocate_ exception wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_throw wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_allocate_ exception wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_throw wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_allocate_ exception wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_throw wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_allocate_ exception wasm32- wasi/libc+ +.a(stdlib_ new_delete. cpp.o): undefined symbol: __cxa_throw wasm32- wasi/libc+ +.a(ios. cpp.o): undefined symbol: __cxa_rethrow wasm32- wasi/libc+ +.a(ios. cpp.o): undefined symbol: __cxa_rethrow 117.0/config/ rules.mk: 496: rlbox.wasm] Error 1 117.0/build- browser/ security/ rlbox' 117.0/config/ recurse. mk:72: security/ rlbox/pre- compile] Error 2 117.0/build- browser' 117.0/config/ recurse. mk:34: compile] Error 2 117.0/build- browser' 117.0/config/ rules.mk: 361: default] Error 2
make[3]: Entering directory '/tmp/firefox-
security/
rm -f rlbox.wasm
/usr/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: /usr/lib/
wasm-ld-16: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [/tmp/firefox-
make[3]: Leaving directory '/tmp/firefox-
make[2]: *** [/tmp/firefox-
make[2]: Leaving directory '/tmp/firefox-
make[1]: *** [/tmp/firefox-
make[1]: Leaving directory '/tmp/firefox-
make: *** [/tmp/firefox-
----begin build log excerpt----
If we look inside the WASI libc++ library for __cxa_allocate_ exception (as just one example), we see several references to it and no definitions, just as the linker is complaining:
$ llvm-nm -A /usr/lib/ wasm32- wasi/libc+ +.a | grep __cxa_allocate_ exception lib/wasm32- wasi/libc+ +.a:cxa_ aux_runtime. cpp.o: U __cxa_allocate_ exception lib/wasm32- wasi/libc+ +.a:cxa_ vector. cpp.o: U __cxa_allocate_ exception lib/wasm32- wasi/libc+ +.a:stdlib_ new_delete. cpp.o: U __cxa_allocate_ exception lib/wasm32- wasi/libc+ +.a:atomic. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:barrier. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:condition_ variable. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:condition_ variable_ destructor. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:future. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:hash. cpp.o: U __cxa_allocate_ exception lib/wasm32- wasi/libc+ +.a:mutex_ destructor. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:new. cpp.o: U __cxa_allocate_ exception lib/wasm32- wasi/libc+ +.a:shared_ mutex.cpp. o: no symbols lib/wasm32- wasi/libc+ +.a:string. cpp.o: U __cxa_allocate_ exception lib/wasm32- wasi/libc+ +.a:thread. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:typeinfo. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:system_ error.cpp. o: U __cxa_allocate_ exception lib/wasm32- wasi/libc+ +.a:vector. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:valarray. cpp.o: U __cxa_allocate_ exception lib/wasm32- wasi/libc+ +.a:ios. cpp.o: U __cxa_allocate_ exception lib/wasm32- wasi/libc+ +.a:ios. instantiations. cpp.o: U __cxa_allocate_ exception lib/wasm32- wasi/libc+ +.a:locale. cpp.o: U __cxa_allocate_ exception
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
Here is that same command, run on Debian unstable:
$ llvm-nm -A /usr/lib/ wasm32- wasi/libc+ +.a | grep __cxa_allocate_ exception lib/wasm32- wasi/libc+ +.a:atomic. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:barrier. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:condition_ variable. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:condition_ variable_ destructor. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:future. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:mutex_ destructor. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:shared_ mutex.cpp. o: no symbols lib/wasm32- wasi/libc+ +.a:thread. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:typeinfo. cpp.o: no symbols lib/wasm32- wasi/libc+ +.a:vector. cpp.o: no symbols
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
/usr/
I don't get the link error on Debian unstable. Something is wrong with how the WASI C++ library is being built for Ubuntu.