emscripten-core / emscripten

Emscripten: An LLVM-to-WebAssembly Compiler
Other
25.68k stars 3.29k forks source link

Emscripten version 3.1.52 static linking broken #21128

Closed ethanaobrien closed 8 months ago

ethanaobrien commented 8 months ago

Static linking broke in emscripten 3.1.52. Rolling back to 3.1.51 fixed compiling my project.

Build error:

cache:INFO:  - ok
libretro_emscripten.bc:1:2: error: expected integer
    1 | !<arch>
      |  ^
1 error generated.
emcc: error: '/usr/local/emscripten/upstream/bin/clang -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=/usr/local/emscripten/upstream/emscripten/cache/sysroot -DEMSCRIPTEN -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -O3 libretro_emscripten.bc -c -o /tmp/emscripten_temp_nl8mnmgj/libretro_emscripten_0.o' failed (returned 1)
make: *** [Makefile.emscripten:244: snes9x_libretro.js] Error 1
make: Leaving directory '/home/ethan/test/snes9x/libretro/RetroArch'

Emcc version:

emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.52 (fa478400df3351f7153c0279bc638784d3d90334)
clang version 18.0.0git (https://github.com/llvm/llvm-project 0a3a0ea5914cb4633f4f4c14f1ddc46ce067061a)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /usr/local/emscripten/upstream/bin

Build it yourself:

  1. git clone https://github.com/EmulatorJS/snes9x.git
  2. cd snes9x/libretro
  3. emmake make platform=emscripten
  4. git clone https://github.com/EmulatorJS/RetroArch.git --depth 1
  5. cp snes9x_libretro_emscripten.bc RetroArch/dist-scripts/
  6. cd RetroArch/dist-scripts/
  7. emmake ./dist-cores.sh emscripten

Note - I didn't need to recompile any blobs after rolling back to 3.1.51 for the project to compile. This appears to be an error with assertions?

sbc100 commented 8 months ago

It looks like the libretro_emscripten.bc file is actually a static library so should be probably be named .a?

I'm curious to know what emcc command caused this error though, and to figure out which emscripten change caused this change in behaviour. Could you run the failing make command with VERBOSE=1 (or V=1.. whatever makes it show you the failing command)? (The error here is only showing the failing clang command, not the outer emcc command that was run).

sbc100 commented 8 months ago

Looks like #20922 is almost certainly what caused this change. Technically I think its good change since it makes emcc match clang's behaviour. If you pass a .bc file to clang it will try to compile it, before passing it to the linker. If you pass .a archive named with the .bc extension it will fail, and emcc now does the same time.

Hopefully it should be easy enough to fix the file extension here? If this problem is very widespread we should consider reverting.

ethanaobrien commented 8 months ago

Could you run the failing make command with VERBOSE=1 (or V=1.. whatever makes it show you the failing command)?

ethan@debian:~/test/snes9x/libretro/RetroArch/dist-scripts$ emmake make -C ../ -f Makefile.emscripten  PTHREAD=0 ASYNC=1 WASM=1  LTO=0 HAVE_OPENGLES3=0 STACK_MEMORY=8388608 HEAP_MEMORY=268435456 MEMORY_PADDING=0 -j7 VERBOSE=1 TARGET=snes9x_libretro.js
make: make -C ../ -f Makefile.emscripten PTHREAD=0 ASYNC=1 WASM=1 LTO=0 HAVE_OPENGLES3=0 STACK_MEMORY=8388608 HEAP_MEMORY=268435456 MEMORY_PADDING=0 -j7 VERBOSE=1 TARGET=snes9x_libretro.js
make: Entering directory '/home/ethan/test/snes9x/libretro/RetroArch'
LD snes9x_libretro.js
libretro_emscripten.bc:1:2: error: expected integer
1 | !<arch>
|  ^
1 error generated.
emcc: error: '/usr/local/emscripten/upstream/bin/clang -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=/usr/local/emscripten/upstream/emscripten/cache/sysroot -DEMSCRIPTEN -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -O3 libretro_emscripten.bc -c -o /tmp/emscripten_temp_qd59xzjh/libretro_emscripten_0.o' failed (returned 1)
make: *** [Makefile.emscripten:244: snes9x_libretro.js] Error 1
make: Leaving directory '/home/ethan/test/snes9x/libretro/RetroArch'
emmake: error: 'make -C ../ -f Makefile.emscripten PTHREAD=0 ASYNC=1 WASM=1 LTO=0 HAVE_OPENGLES3=0 STACK_MEMORY=8388608 HEAP_MEMORY=268435456 MEMORY_PADDING=0 -j7 VERBOSE=1 TARGET=snes9x_libretro.js' failed (returned 2)

If you pass .a archive named with the .bc extension it will fail, and emcc now does the same time.

Renaming the make target for the linker mixed this (libretro_emscripten.bc -> libretro_emscripten.a) fixed this

Hopefully it should be easy enough to fix the file extension here?

Seems to be, though does this check happen everywhere? My snes9x_libretro_emscripten.bc file contains the same header and renaming to have a.a extension changes nothing (does not error with .bc) (though it appears it goes through some middle man on my end?) nevermind. I completely missed the line of code where libretro_emscripten.bc is just the snes9x file renamed, so not too hard to patch

ethanaobrien commented 8 months ago

Sorry... it was supposed to be V=1

make: make -C ../ -f Makefile.emscripten PTHREAD=0 ASYNC=1 WASM=1 LTO=0 HAVE_OPENGLES3=0 STACK_MEMORY=8388608 HEAP_MEMORY=268435456 MEMORY_PADDING=0 -j7 V=1 TARGET=snes9x_libretro.js
make: Entering directory '/home/ethan/test/snes9x/libretro/RetroArch'
/usr/local/emscripten/upstream/emscripten/emcc -o snes9x_libretro.js obj-emscripten/version_git.o obj-emscripten/frontend/frontend_driver.o obj-emscripten/retroarch.o obj-emscripten/runloop.o obj-emscripten/ui/ui_companion_driver.o obj-emscripten/camera/camera_driver.o obj-emscripten/record/record_driver.o obj-emscripten/command.o obj-emscripten/msg_hash.o obj-emscripten/intl/msg_hash_us.o obj-emscripten/./libretro-common/queues/task_queue.o obj-emscripten/tasks/task_content.o obj-emscripten/tasks/task_patch.o obj-emscripten/save.o obj-emscripten/tasks/task_save.o obj-emscripten/tasks/task_movie.o obj-emscripten/tasks/task_file_transfer.o obj-emscripten/tasks/task_image.o obj-emscripten/tasks/task_playlist_manager.o obj-emscripten/tasks/task_manual_content_scan.o obj-emscripten/tasks/task_core_backup.o obj-emscripten/./libretro-common/encodings/encoding_utf.o obj-emscripten/./libretro-common/encodings/encoding_crc32.o obj-emscripten/./libretro-common/encodings/encoding_base64.o obj-emscripten/./libretro-common/compat/fopen_utf8.o obj-emscripten/./libretro-common/compat/compat_strldup.o obj-emscripten/./libretro-common/lists/file_list.o obj-emscripten/./libretro-common/lists/dir_list.o obj-emscripten/./libretro-common/file/retro_dirent.o obj-emscripten/./libretro-common/streams/stdin_stream.o obj-emscripten/./libretro-common/streams/file_stream.o obj-emscripten/./libretro-common/streams/file_stream_transforms.o obj-emscripten/./libretro-common/streams/interface_stream.o obj-emscripten/./libretro-common/streams/memory_stream.o obj-emscripten/./libretro-common/streams/network_stream.o obj-emscripten/./libretro-common/vfs/vfs_implementation.o obj-emscripten/./libretro-common/lists/string_list.o obj-emscripten/./libretro-common/string/stdstring.o obj-emscripten/./libretro-common/memmap/memalign.o obj-emscripten/./libretro-common/file/nbio/nbio_stdio.o obj-emscripten/./libretro-common/lists/linked_list.o obj-emscripten/./libretro-common/lists/nested_list.o obj-emscripten/./libretro-common/queues/generic_queue.o obj-emscripten/./libretro-common/file/nbio/nbio_intf.o obj-emscripten/./libretro-common/file/file_path.o obj-emscripten/./libretro-common/file/file_path_io.o obj-emscripten/file_path_special.o obj-emscripten/./libretro-common/hash/lrc_hash.o obj-emscripten/audio/audio_driver.o obj-emscripten/input/input_driver.o obj-emscripten/input/common/input_hid_common.o obj-emscripten/led/led_driver.o obj-emscripten/gfx/video_driver.o obj-emscripten/gfx/gfx_display.o obj-emscripten/gfx/gfx_animation.o obj-emscripten/gfx/gfx_thumbnail_path.o obj-emscripten/gfx/gfx_thumbnail.o obj-emscripten/configuration.o obj-emscripten/./libretro-common/dynamic/dylib.o obj-emscripten/cores/dynamic_dummy.o obj-emscripten/./libretro-common/queues/message_queue.o obj-emscripten/state_manager.o obj-emscripten/gfx/drivers_font_renderer/bitmapfont.o obj-emscripten/gfx/drivers_font_renderer/bitmapfont_10x10.o obj-emscripten/gfx/drivers_font_renderer/bitmapfont_6x10.o obj-emscripten/tasks/task_autodetect.o obj-emscripten/input/input_autodetect_builtin.o obj-emscripten/input/input_keymaps.o obj-emscripten/./libretro-common/queues/fifo_queue.o obj-emscripten/./libretro-common/compat/compat_fnmatch.o obj-emscripten/./libretro-common/compat/compat_posix_string.o obj-emscripten/cheat_manager.o obj-emscripten/core_info.o obj-emscripten/core_backup.o obj-emscripten/core_option_manager.o obj-emscripten/./libretro-common/file/config_file.o obj-emscripten/./libretro-common/file/config_file_userdata.o obj-emscripten/runtime_file.o obj-emscripten/disk_index_file.o obj-emscripten/tasks/task_screenshot.o obj-emscripten/tasks/task_powerstate.o obj-emscripten/./libretro-common/gfx/scaler/scaler.o obj-emscripten/./libretro-common/gfx/scaler/pixconv.o obj-emscripten/./libretro-common/gfx/scaler/scaler_int.o obj-emscripten/./libretro-common/gfx/scaler/scaler_filter.o obj-emscripten/gfx/font_driver.o obj-emscripten/gfx/video_filter.o obj-emscripten/./libretro-common/audio/resampler/audio_resampler.o obj-emscripten/./libretro-common/audio/dsp_filter.o obj-emscripten/./libretro-common/audio/resampler/drivers/sinc_resampler.o obj-emscripten/./libretro-common/utils/md5.o obj-emscripten/playlist.o obj-emscripten/./libretro-common/features/features_cpu.o obj-emscripten/verbosity.o obj-emscripten/./libretro-common/playlists/label_sanitization.o obj-emscripten/./libretro-common/time/rtime.o obj-emscripten/manual_content_scan.o obj-emscripten/disk_control_interface.o obj-emscripten/tasks/task_audio_mixer.o obj-emscripten/./libretro-common/audio/audio_mix.o obj-emscripten/./libretro-common/audio/audio_mixer.o obj-emscripten/audio/drivers_resampler/cc_resampler.o obj-emscripten/./libretro-common/compat/compat_getopt.o obj-emscripten/./libretro-common/compat/compat_strcasestr.o obj-emscripten/./libretro-common/compat/compat_strl.o obj-emscripten/./libretro-common/formats/image_texture.o obj-emscripten/libretro-db/bintree.o obj-emscripten/libretro-db/libretrodb.o obj-emscripten/libretro-db/query.o obj-emscripten/libretro-db/rmsgpack.o obj-emscripten/libretro-db/rmsgpack_dom.o obj-emscripten/database_info.o obj-emscripten/tasks/task_database.o obj-emscripten/tasks/task_database_cue.o obj-emscripten/menu/menu_explore.o obj-emscripten/tasks/task_menu_explore.o obj-emscripten/frontend/drivers/platform_emscripten.o obj-emscripten/input/drivers/rwebinput_input.o obj-emscripten/input/drivers_joypad/rwebpad_joypad.o obj-emscripten/camera/drivers/rwebcam.o obj-emscripten/input/drivers/emulatorjs_input.o obj-emscripten/audio/drivers/openal.o obj-emscripten/./libretro-common/audio/conversion/s16_to_float.o obj-emscripten/./libretro-common/audio/conversion/float_to_s16.o obj-emscripten/./libretro-common/audio/conversion/mono_to_stereo_float.o obj-emscripten/./libretro-common/audio/conversion/stereo_to_mono_float.o obj-emscripten/menu/drivers/rgui.o obj-emscripten/menu/drivers/materialui.o obj-emscripten/menu/drivers/xmb.o obj-emscripten/menu/drivers/ozone.o obj-emscripten/menu/menu_screensaver.o obj-emscripten/menu/menu_setting.o obj-emscripten/menu/menu_driver.o obj-emscripten/menu/cbs/menu_cbs_ok.o obj-emscripten/menu/cbs/menu_cbs_cancel.o obj-emscripten/menu/cbs/menu_cbs_select.o obj-emscripten/menu/cbs/menu_cbs_start.o obj-emscripten/menu/cbs/menu_cbs_info.o obj-emscripten/menu/cbs/menu_cbs_left.o obj-emscripten/menu/cbs/menu_cbs_right.o obj-emscripten/menu/cbs/menu_cbs_deferred_push.o obj-emscripten/menu/cbs/menu_cbs_scan.o obj-emscripten/menu/cbs/menu_cbs_get_value.o obj-emscripten/menu/cbs/menu_cbs_label.o obj-emscripten/menu/cbs/menu_cbs_sublabel.o obj-emscripten/menu/cbs/menu_cbs_title.o obj-emscripten/menu/menu_displaylist.o obj-emscripten/menu/menu_contentless_cores.o obj-emscripten/gfx/gfx_widgets.o obj-emscripten/gfx/widgets/gfx_widget_screenshot.o obj-emscripten/gfx/widgets/gfx_widget_volume.o obj-emscripten/gfx/widgets/gfx_widget_generic_message.o obj-emscripten/gfx/widgets/gfx_widget_libretro_message.o obj-emscripten/gfx/widgets/gfx_widget_progress_message.o obj-emscripten/gfx/widgets/gfx_widget_load_content_animation.o obj-emscripten/tasks/task_overlay.o obj-emscripten/led/drivers/led_overlay.o obj-emscripten/gfx/drivers_font_renderer/stb.o obj-emscripten/gfx/drivers_font_renderer/stb_unicode.o obj-emscripten/./libretro-common/formats/xml/rxml.o obj-emscripten/./libretro-common/formats/logiqx_dat/logiqx_dat.o obj-emscripten/deps/yxml/yxml.o obj-emscripten/gfx/drivers_context/gfx_null_ctx.o obj-emscripten/gfx/common/gl_common.o obj-emscripten/gfx/drivers/gl2.o obj-emscripten/./libretro-common/gfx/gl_capabilities.o obj-emscripten/./libretro-common/glsym/rglgen.o obj-emscripten/gfx/drivers_context/emscriptenegl_ctx.o obj-emscripten/./libretro-common/glsym/glsym_es2.o obj-emscripten/gfx/common/egl_common.o obj-emscripten/gfx/drivers_shader/shader_glsl.o obj-emscripten/gfx/video_shader_parse.o obj-emscripten/./libretro-common/file/archive_file.o obj-emscripten/./libretro-common/streams/trans_stream.o obj-emscripten/./libretro-common/streams/trans_stream_pipe.o obj-emscripten/./libretro-common/file/archive_file_7z.o obj-emscripten/./deps/7zip/7zArcIn.o obj-emscripten/./deps/7zip/7zBuf.o obj-emscripten/./deps/7zip/7zCrc.o obj-emscripten/./deps/7zip/7zCrcOpt.o obj-emscripten/./deps/7zip/7zDec.o obj-emscripten/./deps/7zip/CpuArch.o obj-emscripten/./deps/7zip/Delta.o obj-emscripten/./deps/7zip/LzFind.o obj-emscripten/./deps/7zip/LzmaDec.o obj-emscripten/./deps/7zip/Lzma2Dec.o obj-emscripten/./deps/7zip/LzmaEnc.o obj-emscripten/./deps/7zip/Bra.o obj-emscripten/./deps/7zip/Bra86.o obj-emscripten/./deps/7zip/BraIA64.o obj-emscripten/./deps/7zip/Bcj2.o obj-emscripten/./deps/7zip/7zFile.o obj-emscripten/./deps/7zip/7zStream.o obj-emscripten/./deps/ibxm/ibxm.o obj-emscripten/./libretro-common/file/archive_file_zlib.o obj-emscripten/./libretro-common/streams/trans_stream_zlib.o obj-emscripten/./libretro-common/streams/rzip_stream.o obj-emscripten/./libretro-common/formats/png/rpng.o obj-emscripten/./libretro-common/formats/png/rpng_encode.o obj-emscripten/./libretro-common/formats/bmp/rbmp_encode.o obj-emscripten/./libretro-common/formats/json/rjson.o obj-emscripten/./libretro-common/formats/image_transfer.o obj-emscripten/./libretro-common/formats/m3u/m3u_file.o obj-emscripten/tasks/task_decompress.o obj-emscripten/gfx/video_filters/2xsai.o obj-emscripten/gfx/video_filters/super2xsai.o obj-emscripten/gfx/video_filters/supereagle.o obj-emscripten/gfx/video_filters/2xbr.o obj-emscripten/gfx/video_filters/darken.o obj-emscripten/gfx/video_filters/epx.o obj-emscripten/gfx/video_filters/scale2x.o obj-emscripten/gfx/video_filters/blargg_ntsc_snes.o obj-emscripten/gfx/video_filters/lq2x.o obj-emscripten/gfx/video_filters/phosphor2x.o obj-emscripten/gfx/video_filters/normal2x.o obj-emscripten/gfx/video_filters/normal2x_width.o obj-emscripten/gfx/video_filters/normal2x_height.o obj-emscripten/gfx/video_filters/normal4x.o obj-emscripten/gfx/video_filters/scanline2x.o obj-emscripten/gfx/video_filters/grid2x.o obj-emscripten/gfx/video_filters/grid3x.o obj-emscripten/gfx/video_filters/gameboy3x.o obj-emscripten/gfx/video_filters/gameboy4x.o obj-emscripten/gfx/video_filters/dot_matrix_3x.o obj-emscripten/gfx/video_filters/dot_matrix_4x.o obj-emscripten/gfx/video_filters/upscale_1_5x.o obj-emscripten/gfx/video_filters/upscale_256x_320x240.o obj-emscripten/gfx/video_filters/picoscale_256x_320x240.o obj-emscripten/gfx/video_filters/upscale_240x160_320x240.o obj-emscripten/gfx/video_filters/upscale_mix_240x160_320x240.o obj-emscripten/libretro-common/audio/dsp_filters/echo.o obj-emscripten/libretro-common/audio/dsp_filters/eq.o obj-emscripten/libretro-common/audio/dsp_filters/chorus.o obj-emscripten/libretro-common/audio/dsp_filters/iir.o obj-emscripten/libretro-common/audio/dsp_filters/panning.o obj-emscripten/libretro-common/audio/dsp_filters/phaser.o obj-emscripten/libretro-common/audio/dsp_filters/reverb.o obj-emscripten/libretro-common/audio/dsp_filters/wahwah.o libretro_emscripten.bc -s USE_ZLIB=1 -lm -L. --no-heap-copy -s USE_ZLIB=1 -s TOTAL_STACK=8388608 -s TOTAL_MEMORY=268435456 -s NO_EXIT_RUNTIME=1 -s EXPORTED_RUNTIME_METHODS="['callMain', 'cwrap', 'getValue', 'FS', 'PATH', 'ERRNO_CODES']" -s EXPORTED_FUNCTIONS= -s EXPORTED_FUNCTIONS=['_main','_malloc','_load_state','_ejs_set_variable','_simulate_input','_shader_enable','_get_state_info','_save_state_info','_set_cheat','_cmd_take_screenshot','_system_restart','_cmd_savefiles','_get_core_options','_cmd_save_state','_supports_states','_reset_cheat','_toggleMainLoop','_save_file_path','_get_disk_count','_set_current_disk','_get_current_disk','_refresh_save_files','_toggle_fastforward','_set_ff_ratio','_toggle_slow_motion','_set_sm_ratio','_toggle_rewind','_set_rewind_granularity','_get_current_frame_count','_ejs_set_keyboard_enabled'] -lidbfs.js -s ERROR_ON_UNDEFINED_SYMBOLS=0 -s ALLOW_MEMORY_GROWTH=1 -s GL_ENABLE_GET_PROC_ADDRESS=1 --js-library emscripten/library_rwebcam.js --js-library emscripten/library_errno_codes.js -lopenal -s FULL_ES2=1 -s MAX_WEBGL_VERSION=2 -s ASYNCIFY=1 -s ASYNCIFY_STACK_SIZE=131072 -s WASM=1 -O3 -s PRECISE_F32=1 -s STACK_SIZE=131072
libretro_emscripten.bc:1:2: error: expected integer
    1 | !<arch>
      |  ^
1 error generated.
emcc: error: '/usr/local/emscripten/upstream/bin/clang -target wasm32-unknown-emscripten -fignore-exceptions -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr --sysroot=/usr/local/emscripten/upstream/emscripten/cache/sysroot -DEMSCRIPTEN -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -O3 libretro_emscripten.bc -c -o /tmp/emscripten_temp_q0lt9two/libretro_emscripten_0.o' failed (returned 1)
make: *** [Makefile.emscripten:244: snes9x_libretro.js] Error 1
make: Leaving directory '/home/ethan/test/snes9x/libretro/RetroArch'
emmake: error: 'make -C ../ -f Makefile.emscripten PTHREAD=0 ASYNC=1 WASM=1 LTO=0 HAVE_OPENGLES3=0 STACK_MEMORY=8388608 HEAP_MEMORY=268435456 MEMORY_PADDING=0 -j7 V=1 TARGET=snes9x_libretro.js' failed (returned 2)
sbc100 commented 8 months ago

Glad you were able to fix. Hopefully this doesn't bite any other folks.

Jonathhhan commented 6 months ago

I have the same issue with Open Frameworks. Since 3.1.52 I get this error:

/mnt/c/Users/Jonat/Desktop/openFrameworks-audioWorklet-3/libs/openFrameworksCompiled/lib/emscripten/libopenFrameworks.bc:1:2: error: expected top-level entity
    1 | <U+0000>asm<U+0001><U+0000><U+0000><U+0000><U+0001><8C><U+0008>~`<U+0001><U+007F><U+0000>`<U+0003><U+007F><U+007F><U+007F><U+0000>`<U+0001><U+007F><U+0001><U+007F>`<U+0002><U+007F><U+007F><U+0000>`<U+0002><U+007F><U+007F><U+0001><U+007F>`<U+0001><U+007F><U+0001>}`<U+0006><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0000>`<U+0003><U+007F><U+007F><U+007F><U+0001><U+007F>`<U+0002><U+007F>}<U+0000>`<U+0007><U+007F>}<U+007F><U+007F><U+007F><U+007F><U+007F><U+0000>`<U+0004><U+007F>}<U+007F><U+007F><U+0000>`<U+0004><U+007F><U+007F><U+007F>}<U+0000>`<U+0004><U+007F>}}<U+007F><U+0000>`<U+0004><U+007F>}}}<U+0000>`<U+0004><U+007F><U+007F><U+007F><U+007F><U+0000>`<U+0005><U+007F><U+007F><U+007F>}}<U+0000>`<U+0000><U+0000>`<U+0005><U+007F>}}}}<U+0000>`<U+0003><U+007F>}}<U+0000>`<U+0006><U+007F>}}}}<U+007F><U+0000>`<U+0004><U+007F><U+007F><U+007F><U+007F><U+0001><U+007F>`<U+0005><U+007F><U+007F><U+007F><U+007F><U+007F><U+0000>`<U+0003><U+007F><U+007F>}<U+0000>`<U+0006><U+007F>}}}}}<U+0000>`<U+0005><U+007F><U+007F>}}}<U+0000>`<U+0007><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+007F><U+0000>`<U+000B><U+007F><U+007F>}}}}}}}}}<U+0000>`<U+0007><U+007F>}}}}}}<U+0000>`<U+0004><U+007F><U+007F>}}<U+0000>`

If I rename libopenFrameworks.bc to libopenFrameworks.a in the config file I get this error: em++: error: /mnt/c/Users/Jonat/Desktop/openFrameworks-audioWorklet-3/libs/openFrameworksCompiled/lib/emscripten/libopenFrameworks.a: Unknown format, not a static library!

Any idea how to solve this? Thanks!

sbc100 commented 6 months ago

What does file /mnt/c/Users/Jonat/Desktop/openFrameworks-audioWorklet-3/libs/openFrameworksCompiled/lib/emscripten/libopenFrameworks.bc report? (i.e. what type of file is it actually?)

Can you attach the /mnt/c/Users/Jonat/Desktop/openFrameworks-audioWorklet-3/libs/openFrameworksCompiled/lib/emscripten/libopenFrameworks.bc file to this ticket perhaps?

sbc100 commented 6 months ago

Oh wait.. I can see that the file is actually a Wasm file. In that case perhaps just call is .o (since its likely an object file).

Do you now how that file was built?

Jonathhhan commented 6 months ago

@sbc100 thank you very much. That is the (old) config file: https://github.com/openframeworks/openFrameworks/blob/master/libs/openFrameworksCompiled/project/emscripten/config.emscripten.default.mk Yes, it works again, if I compile it as an o. file. There is a another precompiled .bc lib (pugixml) in Open Frameworks, if I ignore that in addition, it does work again (will open an issue for that in the Open Frameworks repo). I guess, pugixml needs to be compiled as an object file, too?

Jonathhhan commented 6 months ago

@sbc100 will removing the check for .a files make the .bc files work again, or do I still need to compile them as .o?

sbc100 commented 6 months ago

Removing the check should work. But its still best to give the file the correct extension as a general principle.

The that file is designed to be an ar archive then its being built wrong somehow. If its supposed of be a single object file it should probably have the .o extension and should not have the lib prefix.

Jonathhhan commented 6 months ago

@sbc100 thanks.