Open radiofan opened 1 week ago
I noticed that Emscripten
boost::multiprecision has implementations of isnan(), isinf() and etc for boost::multiprecision::number, but these functions not in std namespace. How can I add boost implementations to the global scope of std?
Hello. I have encountered a problem with porting my program. I use std::complex with boost::multiprecision::number. In a simplified version, my program looks like this:
This program is successfully compiled by Clang version 14.0.0 (used default GNU complex) and executed.
Clang link verbose command
[1/2] Building CXX object CMakeFiles/multiprecision.dir/main.cpp.o Ubuntu clang version 14.0.0-1ubuntu1.1 Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11 Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11 Candidate multilib: .;@m64 Selected multilib: .;@m64 (in-process) "/usr/lib/llvm-14/bin/clang" -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all --mrelax-relocations -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name main.cpp -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debug-info-kind=constructor -dwarf-version=5 -debugger-tuning=gdb -v -fcoverage-compilation-dir=/home/user/examples/multiprecision/build/Debug -resource-dir /usr/lib/llvm-14/lib/clang/14.0.0 -dependency-file CMakeFiles/multiprecision.dir/main.cpp.o.d -MT CMakeFiles/multiprecision.dir/main.cpp.o -sys-header-deps -isystem /home/user/.conan2/p/boost0e71b73da677f/p/include -isystem /home/user/.conan2/p/b/sdl1ea2f57577c3b/p/include -isystem /home/user/.conan2/p/b/sdl1ea2f57577c3b/p/include/SDL2 -D BOARD_HOST -I /home/user/examples/multiprecision/build/Debug -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/x86_64-linux-gnu/c++/11 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/backward -internal-isystem /usr/lib/llvm-14/lib/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -std=c++2b -fdeprecated-macro -fdebug-compilation-dir=/home/user/examples/multiprecision/build/Debug -ferror-limit 19 -fsanitize=address -fsanitize-system-ignorelist=/usr/lib/llvm-14/lib/clang/14.0.0/share/asan_ignorelist.txt -fsanitize-address-use-after-scope -fno-assume-sane-operator-new -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o CMakeFiles/multiprecision.dir/main.cpp.o -x c++ /home/user/examples/multiprecision/main.cpp clang -cc1 version 14.0.0 based upon LLVM 14.0.0 default target x86_64-pc-linux-gnu ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" ignoring nonexistent directory "/include" #include "..." search starts here: #include <...> search starts here: /home/user/examples/multiprecision/build/Debug /home/user/.conan2/p/boost0e71b73da677f/p/include /home/user/.conan2/p/b/sdl1ea2f57577c3b/p/include /home/user/.conan2/p/b/sdl1ea2f57577c3b/p/include/SDL2 /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11 /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/x86_64-linux-gnu/c++/11 /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/backward /usr/lib/llvm-14/lib/clang/14.0.0/include /usr/local/include /usr/include/x86_64-linux-gnu /usr/include End of search list. [2/2] Linking CXX executable multiprecision Ubuntu clang version 14.0.0-1ubuntu1.1 Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11 Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11 Candidate multilib: .;@m64 Selected multilib: .;@m64 "/usr/bin/ld" -pie -z relro --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o multiprecision /lib/x86_64-linux-gnu/Scrt1.o /lib/x86_64-linux-gnu/crti.o /usr/bin/../lib/gcc/x86_64-linux-gnu/11/crtbeginS.o -L/home/user/.conan2/p/b/sdl1ea2f57577c3b/p/lib -L/usr/bin/../lib/gcc/x86_64-linux-gnu/11 -L/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/usr/lib/llvm-14/bin/../lib -L/lib -L/usr/lib --whole-archive /usr/lib/llvm-14/lib/clang/14.0.0/lib/linux/libclang_rt.asan_static-x86_64.a --no-whole-archive --whole-archive /usr/lib/llvm-14/lib/clang/14.0.0/lib/linux/libclang_rt.asan-x86_64.a --no-whole-archive --dynamic-list=/usr/lib/llvm-14/lib/clang/14.0.0/lib/linux/libclang_rt.asan-x86_64.a.syms --whole-archive /usr/lib/llvm-14/lib/clang/14.0.0/lib/linux/libclang_rt.asan_cxx-x86_64.a --no-whole-archive --dynamic-list=/usr/lib/llvm-14/lib/clang/14.0.0/lib/linux/libclang_rt.asan_cxx-x86_64.a.syms CMakeFiles/multiprecision.dir/main.cpp.o -rpath /home/user/.conan2/p/b/sdl1ea2f57577c3b/p/lib: /home/user/.conan2/p/b/sdl1ea2f57577c3b/p/lib/libSDL2maind.a /home/user/.conan2/p/b/sdl1ea2f57577c3b/p/lib/libSDL2d.a -ldl -lrt -lpthread -lGL -lstdc++ -lm --no-as-needed -lpthread -lrt -lm -ldl -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/bin/../lib/gcc/x86_64-linux-gnu/11/crtendS.o /lib/x86_64-linux-gnu/crtn.o
But the same program is not compiled by emcc with emsdk std::complex. Some standard functions do not have a definition for working with boost::multiprecision::numbers. These functions used in math operator overloading.
Version of emscripten/emsdk:
Full link command and output with
-v
appended: