When trying to use the build-for-mac-os.sh script on my Mac M1 running Big Sur (after fixing a bunch of other problems related to include and library paths and some other odds and ends), I get this error:
CCLD ngspice
Undefined symbols for architecture arm64:
"std::exception::what() const", referenced from:
vtable for std::__1::bad_function_call in libhicum2.a(hicumL2.o)
"std::exception::~exception()", referenced from:
std::__1::bad_function_call::~bad_function_call() in libhicum2.a(hicumL2.o)
std::__1::bad_function_call::~bad_function_call() in libhicum2.a(hicumL2.o)
"typeinfo for std::exception", referenced from:
typeinfo for std::__1::bad_function_call in libhicum2.a(hicumL2.o)
"vtable for __cxxabiv1::__class_type_info", referenced from:
typeinfo for std::__1::__function::__base<void (duals::dual\<double="">, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*)> in libhicum2.a(hicumL2.o)
typeinfo for HICUMload::$_0 in libhicum2.a(hicumL2.o)
typeinfo for std::__1::__function::__base<void (duals::dual\<double="">, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*)> in libhicum2.a(hicumL2.o)
typeinfo for HICUMload::$_1 in libhicum2.a(hicumL2.o)
typeinfo for std::__1::__function::__base<duals::dual\<double> (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>)> in libhicum2.a(hicumL2.o)
typeinfo for HICUMload::$_2 in libhicum2.a(hicumL2.o)
typeinfo for std::__1::__function::__base<duals::dual\<double> (duals::dual\<double>, duals::dual\<double>)> in libhicum2.a(hicumL2.o)
...
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for __cxxabiv1::__si_class_type_info", referenced from:
typeinfo for std::__1::__function::__func<hicumload::$_0, std::__1::allocator\<hicumload::$_0="">, void (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*)> in libhicum2.a(hicumL2.o)
typeinfo for std::__1::__function::__func<hicumload::$_1, std::__1::allocator\<hicumload::$_1="">, void (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*)> in libhicum2.a(hicumL2.o)
typeinfo for std::__1::bad_function_call in libhicum2.a(hicumL2.o)
typeinfo for std::__1::__function::__func<hicumload::$_2, std::__1::allocator\<hicumload::$_2="">, duals::dual\<double> (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>)> in libhicum2.a(hicumL2.o)
typeinfo for std::__1::__function::__func<hicumload::$_3, std::__1::allocator\<hicumload::$_3="">, duals::dual\<double> (duals::dual\<double>, duals::dual\<double>)> in libhicum2.a(hicumL2.o)
typeinfo for std::__1::__function::__func<hicumload::$_4, std::__1::allocator\<hicumload::$_4="">, duals::dual\<double> (duals::dual\<double>, duals::dual\<double>)> in libhicum2.a(hicumL2.o)
typeinfo for std::__1::__function::__func<hicumload::$_5, std::__1::allocator\<hicumload::$_5="">, duals::dual\<double> (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>)> in libhicum2.a(hicumL2.o)
...
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"operator delete(void*)", referenced from:
std::__1::__function::__func<hicumload::$_0, std::__1::allocator\<hicumload::$_0="">, void (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*)>::~__func() in libhicum2.a(hicumL2.o)
std::__1::__function::__func<hicumload::$_0, std::__1::allocator\<hicumload::$_0="">, void (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*)>::destroy_deallocate() in libhicum2.a(hicumL2.o)
std::__1::__function::__func<hicumload::$_1, std::__1::allocator\<hicumload::$_1="">, void (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*)>::~__func() in libhicum2.a(hicumL2.o)
std::__1::__function::__func<hicumload::$_1, std::__1::allocator\<hicumload::$_1="">, void (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*)>::destroy_deallocate() in libhicum2.a(hicumL2.o)
std::__1::bad_function_call::~bad_function_call() in libhicum2.a(hicumL2.o)
std::__1::__function::__func<hicumload::$_2, std::__1::allocator\<hicumload::$_2="">, duals::dual\<double> (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>)>::~__func() in libhicum2.a(hicumL2.o)
std::__1::__function::__func<hicumload::$_2, std::__1::allocator\<hicumload::$_2="">, duals::dual\<double> (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>)>::destroy_deallocate() in libhicum2.a(hicumL2.o)
...
"operator new(unsigned long)", referenced from:
_HICUMload in libhicum2.a(hicumL2.o)
std::__1::__function::__func<hicumload::$_0, std::__1::allocator\<hicumload::$_0="">, void (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*)>::__clone() const in libhicum2.a(hicumL2.o)
std::__1::__function::__func<hicumload::$_1, std::__1::allocator\<hicumload::$_1="">, void (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*, duals::dual\<double>*)>::__clone() const in libhicum2.a(hicumL2.o)
std::__1::__function::__func<hicumload::$_2, std::__1::allocator\<hicumload::$_2="">, duals::dual\<double> (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>, duals::dual\<double>)>::__clone() const in libhicum2.a(hicumL2.o)
std::__1::__function::__func<hicumload::$_3, std::__1::allocator\<hicumload::$_3="">, duals::dual\<double> (duals::dual\<double>, duals::dual\<double>)>::__clone() const in libhicum2.a(hicumL2.o)
std::__1::__function::__func<hicumload::$_4, std::__1::allocator\<hicumload::$_4="">, duals::dual\<double> (duals::dual\<double>, duals::dual\<double>)>::__clone() const in libhicum2.a(hicumL2.o)
std::__1::__function::__func<hicumload::$_5, std::__1::allocator\<hicumload::$_5="">, duals::dual\<double> (duals::dual\<double>, duals::dual\<double>, duals::dual\<double>)>::__clone() const in libhicum2.a(hicumL2.o)
...
"cxaallocate_exception", referenced from:
std::1::__throw_bad_function_call() in libhicum2.a(hicumL2.o)
"cxathrow", referenced from:
std::1::__throw_bad_function_call() in libhicum2.a(hicumL2.o)
"___gxx_personality_v0", referenced from:
_HICUMload in libhicum2.a(hicumL2.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)</double></double></double></double></hicumload::$_5,></double></double></double></hicumload::$_4,></double></double></double></hicumload::$_3,></double></double></double></double></double></hicumload::$_2,></double></double></double></double></double></double></double></double></hicumload::$_1,></double></double></double></double></double></double></double></double></hicumload::$_0,></double></double></double></double></double></hicumload::$_2,></double></double></double></double></double></hicumload::$_2,></double></double></double></double></double></double></double></double></hicumload::$_1,></double></double></double></double></double></double></double></double></hicumload::$_1,></double></double></double></double></double></double></double></double></hicumload::$_0,></double></double></double></double></double></double></double></double></hicumload::$_0,></double></double></double></double></hicumload::$_5,></double></double></double></hicumload::$_4,></double></double></double></hicumload::$_3,></double></double></double></double></double></hicumload::$_2,></double></double></double></double></double></double></double></double></hicumload::$_1,></double></double></double></double></double></double></double></double></hicumload::$_0,></double></double></duals::dual\<double></double></double></double></double></duals::dual\<double></double></double></double></double></double></double></double></void></double></double></double></double></double></double></double></void>
Please try the script attached which I am using to compile ngspice on my MAC i5, BigSur.
If this is o.k., I will delete the old one. If this shows an error, we have to analyze it.
Last edit: Holger Vogt 2022-05-03
Markus,
in case you have access to this kind of computer.
Dietmar
Unfortunately, I do not have access to a Mac...
This requires the compatibility with arm64 architecture.
Fra
It seems to me that the C++ std library is missing in the build. Please try adding it, either using a c++ compiler and/or adding "-lc++" to the build arguments. Maybe it solves the issue....
Instead of being helpful to fix the issue, Aaron has created a video (https://www.youtube.com/watch?v=3MUme6g2n3U) whining and lamenting, finally stopping at OMP, without recognizing that the Apple clang compiler may not support OpenMP (at least for macOS on Intel it does not).
ngspice will compile also for arm64, as is shown on the Debian page https://buildd.debian.org/status/package.php?p=ngspice&suite=bookworm . Homebrew obviously also has got ngspice compiling for M1 (see https://formulae.brew.sh/formula/ngspice).
So may I suggest that we close this issue for now.