Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Building for ARM fails #162

Closed
triplef opened this issue Jun 4, 2020 · 7 comments · Fixed by #163
Closed

Building for ARM fails #162

triplef opened this issue Jun 4, 2020 · 7 comments · Fixed by #163

Comments

@triplef
Copy link
Member

triplef commented Jun 4, 2020

With the latest EH changes the project fails building on both 32- and 64-bit ARM.

armeabi-v7a

eh_personality.c:571:22: error: no member named 'private_1' in 'struct _Unwind_Exception'
                ex->cxx_exception->private_1 = exceptionObject->private_1;
                ~~~~~~~~~~~~~~~~~  ^
eh_personality.c:571:51: error: no member named 'private_1' in 'struct _Unwind_Exception'
                ex->cxx_exception->private_1 = exceptionObject->private_1;
                                               ~~~~~~~~~~~~~~~  ^
eh_personality.c:572:22: error: no member named 'private_2' in 'struct _Unwind_Exception'
                ex->cxx_exception->private_2 = exceptionObject->private_2;
                ~~~~~~~~~~~~~~~~~  ^
eh_personality.c:572:51: error: no member named 'private_2' in 'struct _Unwind_Exception'
                ex->cxx_exception->private_2 = exceptionObject->private_2;
                                               ~~~~~~~~~~~~~~~  ^
eh_personality.c:576:20: error: no member named 'private_1' in 'struct _Unwind_Exception'
                exceptionObject->private_1 = ex->cxx_exception->private_1;
                ~~~~~~~~~~~~~~~  ^
eh_personality.c:576:51: error: no member named 'private_1' in 'struct _Unwind_Exception'
                exceptionObject->private_1 = ex->cxx_exception->private_1;
                                             ~~~~~~~~~~~~~~~~~  ^
eh_personality.c:577:20: error: no member named 'private_2' in 'struct _Unwind_Exception'
                exceptionObject->private_2 = ex->cxx_exception->private_2;
                ~~~~~~~~~~~~~~~  ^
eh_personality.c:577:51: error: no member named 'private_2' in 'struct _Unwind_Exception'
                exceptionObject->private_2 = ex->cxx_exception->private_2;
                                             ~~~~~~~~~~~~~~~~~  ^

arm64-v8a

CMakeFiles/objc.dir/eh_personality.c.o: In function `internal_objc_personality':
eh_personality.c:392: undefined reference to `cxx_exception_class'
eh_personality.c:392: undefined reference to `cxx_exception_class'
eh_personality.c:394: undefined reference to `test_cxx_eh_implementation'
CMakeFiles/objc.dir/eh_personality.c.o: In function `__gnustep_objcxx_personality_v0':
eh_personality.c:558: undefined reference to `cxx_exception_class'
eh_personality.c:558: undefined reference to `cxx_exception_class'
eh_personality.c:560: undefined reference to `test_cxx_eh_implementation'
CMakeFiles/objc.dir/eh_personality.c.o: In function `objc_begin_catch':
eh_personality.c:627: undefined reference to `cxx_exception_class'
eh_personality.c:627: undefined reference to `cxx_exception_class'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

As a side-note, it’d be great to have CI for ARM as well. Cirrus CI doesn’t support this yet, but hopefully soon. I couldn’t figure out whether Azure supports this.

@triplef triplef changed the title Building for ARM fails due to EH assuming Itanium unwind Building for ARM fails Jun 4, 2020
@davidchisnall
Copy link
Member

These are supposed to just be copying the state, we should be able to add a COPY_EXCEPTION macro in the two unwind headers to do the right thing here.

For other projects, we're using the Docker + QEMU thing on Azure, which should be fine for this.

@cyclaero
Copy link

cyclaero commented Jun 6, 2020

These are supposed to just be copying the state, we should be able to add a COPY_EXCEPTION macro in the two unwind headers to do the right thing here.

I ran into the same issue. Where exactly would I add COPY_EXCEPTION in my working copy, in order to get libobjc2 build on ARMv7?

For the time being, I issued:

sed -e "s|ex->cxx_exception->private_[12] = exceptionObject->private_[12]|;|;s|exceptionObject->private_[12] = ex->cxx_exception->private_[12]|;|" -i ".back" ../eh_personality.c
make install clean
mv ../eh_personality.c.back ../eh_personality.c

@triplef
Copy link
Member Author

triplef commented Jun 7, 2020

These are supposed to just be copying the state, we should be able to add a COPY_EXCEPTION macro in the two unwind headers to do the right thing here.

I’ve given this a try in #163. Let me know if there’s anything I should change.

I realized that the errors I was seeing on arm64 (undefined reference to cxx_exception_class etc.) were caused by building without a usable C++ runtime. Not sure if that should be a supported use case (I wouldn’t need it) – if not maybe "No useable C++ runtime found" should be an error.

For other projects, we're using the Docker + QEMU thing on Azure, which should be fine for this.

Good point. I realized it’d be great to specifically test building for Android, which should work fine on CI using cross-compilation. I’ll look into this once libc++abi support lands.

@cyclaero
Copy link

cyclaero commented Jun 8, 2020

This still does not compile on ARMv7 (s. error log below). For the time being I got it to build with:

sed -e "s|COPY_EXCEPTION\(.*\)||" -i ".back" ../eh_personality.c

[ 54%] Building C object CMakeFiles/objc.dir/eh_personality.c.o
/root/install/libobjc2/eh_personality.c:571:3: error: invalid application of 'sizeof' to an incomplete type 'struct unwinder_cache'
                COPY_EXCEPTION(ex->cxx_exception, exceptionObject)
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/install/libobjc2/unwind-arm.h:206:56: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->unwinder_cache, (src)->unwinder_cache, sizeof(struct unwinder_cache)); \
                                                       ^     ~~~~~~~~~~~~~~~~~~~~~~~
/root/install/libobjc2/eh_personality.c:571:3: note: forward declaration of 'struct unwinder_cache'
/root/install/libobjc2/unwind-arm.h:206:70: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->unwinder_cache, (src)->unwinder_cache, sizeof(struct unwinder_cache)); \
                                                                     ^
/root/install/libobjc2/eh_personality.c:571:3: error: invalid application of 'sizeof' to an incomplete type 'struct barrier_cache'
                COPY_EXCEPTION(ex->cxx_exception, exceptionObject)
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/install/libobjc2/unwind-arm.h:207:54: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->barrier_cache, (src)->barrier_cache, sizeof(struct barrier_cache)); \
                                                     ^     ~~~~~~~~~~~~~~~~~~~~~~
/root/install/libobjc2/eh_personality.c:571:3: note: forward declaration of 'struct barrier_cache'
/root/install/libobjc2/unwind-arm.h:207:68: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->barrier_cache, (src)->barrier_cache, sizeof(struct barrier_cache)); \
                                                                   ^
/root/install/libobjc2/eh_personality.c:571:3: error: invalid application of 'sizeof' to an incomplete type 'struct cleanup_cache'
                COPY_EXCEPTION(ex->cxx_exception, exceptionObject)
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/install/libobjc2/unwind-arm.h:208:54: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->cleanup_cache, (src)->cleanup_cache, sizeof(struct cleanup_cache)); \
                                                     ^     ~~~~~~~~~~~~~~~~~~~~~~
/root/install/libobjc2/eh_personality.c:571:3: note: forward declaration of 'struct cleanup_cache'
/root/install/libobjc2/unwind-arm.h:208:68: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->cleanup_cache, (src)->cleanup_cache, sizeof(struct cleanup_cache)); \
                                                                   ^
/root/install/libobjc2/eh_personality.c:571:3: error: invalid application of 'sizeof' to an incomplete type 'struct pr_cache'
                COPY_EXCEPTION(ex->cxx_exception, exceptionObject)
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/install/libobjc2/unwind-arm.h:209:44: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->pr_cache, (src)->pr_cache, sizeof(struct pr_cache));
                                           ^     ~~~~~~~~~~~~~~~~~
/root/install/libobjc2/eh_personality.c:571:3: note: forward declaration of 'struct pr_cache'
/root/install/libobjc2/unwind-arm.h:209:58: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->pr_cache, (src)->pr_cache, sizeof(struct pr_cache));
                                                         ^
/root/install/libobjc2/eh_personality.c:575:3: error: invalid application of 'sizeof' to an incomplete type 'struct unwinder_cache'
                COPY_EXCEPTION(exceptionObject, ex->cxx_exception)
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/install/libobjc2/unwind-arm.h:206:56: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->unwinder_cache, (src)->unwinder_cache, sizeof(struct unwinder_cache)); \
                                                       ^     ~~~~~~~~~~~~~~~~~~~~~~~
/root/install/libobjc2/eh_personality.c:571:3: note: forward declaration of 'struct unwinder_cache'
                COPY_EXCEPTION(ex->cxx_exception, exceptionObject)
                ^
/root/install/libobjc2/unwind-arm.h:206:70: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->unwinder_cache, (src)->unwinder_cache, sizeof(struct unwinder_cache)); \
                                                                     ^
/root/install/libobjc2/eh_personality.c:575:3: error: invalid application of 'sizeof' to an incomplete type 'struct barrier_cache'
                COPY_EXCEPTION(exceptionObject, ex->cxx_exception)
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/install/libobjc2/unwind-arm.h:207:54: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->barrier_cache, (src)->barrier_cache, sizeof(struct barrier_cache)); \
                                                     ^     ~~~~~~~~~~~~~~~~~~~~~~
/root/install/libobjc2/eh_personality.c:571:3: note: forward declaration of 'struct barrier_cache'
                COPY_EXCEPTION(ex->cxx_exception, exceptionObject)
                ^
/root/install/libobjc2/unwind-arm.h:207:68: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->barrier_cache, (src)->barrier_cache, sizeof(struct barrier_cache)); \
                                                                   ^
/root/install/libobjc2/eh_personality.c:575:3: error: invalid application of 'sizeof' to an incomplete type 'struct cleanup_cache'
                COPY_EXCEPTION(exceptionObject, ex->cxx_exception)
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/install/libobjc2/unwind-arm.h:208:54: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->cleanup_cache, (src)->cleanup_cache, sizeof(struct cleanup_cache)); \
                                                     ^     ~~~~~~~~~~~~~~~~~~~~~~
/root/install/libobjc2/eh_personality.c:571:3: note: forward declaration of 'struct cleanup_cache'
                COPY_EXCEPTION(ex->cxx_exception, exceptionObject)
                ^
/root/install/libobjc2/unwind-arm.h:208:68: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->cleanup_cache, (src)->cleanup_cache, sizeof(struct cleanup_cache)); \
                                                                   ^
/root/install/libobjc2/eh_personality.c:575:3: error: invalid application of 'sizeof' to an incomplete type 'struct pr_cache'
                COPY_EXCEPTION(exceptionObject, ex->cxx_exception)
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/install/libobjc2/unwind-arm.h:209:44: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->pr_cache, (src)->pr_cache, sizeof(struct pr_cache));
                                           ^     ~~~~~~~~~~~~~~~~~
/root/install/libobjc2/eh_personality.c:571:3: note: forward declaration of 'struct pr_cache'
                COPY_EXCEPTION(ex->cxx_exception, exceptionObject)
                ^
/root/install/libobjc2/unwind-arm.h:209:58: note: expanded from macro 'COPY_EXCEPTION'
  memcpy((dst)->pr_cache, (src)->pr_cache, sizeof(struct pr_cache));
                                                         ^
8 errors generated.
*** Error code 1

@triplef
Copy link
Member Author

triplef commented Jun 8, 2020

Which compiler are you using? I’m not sure but maybe it requires to specify the nested structs with something like struct _Unwind_Exception.unwinder_cache.

@cyclaero
Copy link

cyclaero commented Jun 8, 2020

Here is the output of clang --version:

FreeBSD clang version 10.0.1 ([email protected]:llvm/llvm-project.git llvmorg-10.0.1-rc1-0-gf79cd71e145)
Target: armv7-unknown-freebsd13.0-gnueabihf
Thread model: posix
InstalledDir: /usr/bin

@cyclaero
Copy link

cyclaero commented Jun 8, 2020

I see another issue now. The statically built libobjc2.a(-DBUILD_STATIC_LIBOBJC=ON) does not work anymore. On ARMv7 it simply refuses to link. Shall I open a new issue report about this?

cc cycalc.o interim.o utils.o main.o /usr/local/lib/libobjc.a -lm -o cycalc

ld: error: undefined symbol: objc_storeStrong
>>> referenced by ivar.c
>>>               ivar.c.o:(object_setIvar) in archive /usr/local/lib/libobjc.a
>>> referenced by ivar.c
>>>               ivar.c.o:(object_setInstanceVariable) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: objc_storeWeak
>>> referenced by ivar.c
>>>               ivar.c.o:(object_setIvar) in archive /usr/local/lib/libobjc.a
>>> referenced by ivar.c
>>>               ivar.c.o:(object_setInstanceVariable) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: objc_retainAutoreleaseReturnValue
>>> referenced by ivar.c
>>>               ivar.c.o:(object_getIvar) in archive /usr/local/lib/libobjc.a
>>> referenced by properties.m
>>>               properties.m.o:(objc_getProperty) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: objc_loadWeak
>>> referenced by ivar.c
>>>               ivar.c.o:(object_getIvar) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: init_arc
>>> referenced by loader.c
>>>               loader.c.o:(init_runtime) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: objc_autoreleasePoolPush
>>> referenced by loader.c
>>>               loader.c.o:(init_runtime) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: objc_autoreleasePoolPop
>>> referenced by loader.c
>>>               loader.c.o:(init_runtime) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: objc_retain
>>> referenced by associate.m
>>>               associate.m.o:(objc_setAssociatedObject) in archive /usr/local/lib/libobjc.a
>>> referenced by blocks_runtime.m
>>>               blocks_runtime.m.o:(_Block_object_assign) in archive /usr/local/lib/libobjc.a
>>> referenced by properties.m
>>>               properties.m.o:(objc_getProperty) in archive /usr/local/lib/libobjc.a
>>> referenced by properties.m
>>>               properties.m.o:(objc_setProperty) in archive /usr/local/lib/libobjc.a
>>> referenced by properties.m
>>>               properties.m.o:(objc_setProperty_atomic) in archive /usr/local/lib/libobjc.a
>>> referenced by properties.m
>>>               properties.m.o:(objc_setProperty_nonatomic) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: objc_release
>>> referenced by associate.m
>>>               associate.m.o:(objc_setAssociatedObject) in archive /usr/local/lib/libobjc.a
>>> referenced by associate.m
>>>               associate.m.o:(cleanupReferenceList) in archive /usr/local/lib/libobjc.a
>>> referenced by associate.m
>>>               associate.m.o:(cleanupReferenceList) in archive /usr/local/lib/libobjc.a
>>> referenced by associate.m
>>>               associate.m.o:(cleanupReferenceList) in archive /usr/local/lib/libobjc.a
>>> referenced by associate.m
>>>               associate.m.o:(cleanupReferenceList) in archive /usr/local/lib/libobjc.a
>>> referenced by associate.m
>>>               associate.m.o:(cleanupReferenceList) in archive /usr/local/lib/libobjc.a
>>> referenced by associate.m
>>>               associate.m.o:(cleanupReferenceList) in archive /usr/local/lib/libobjc.a
>>> referenced by associate.m
>>>               associate.m.o:(cleanupReferenceList) in archive /usr/local/lib/libobjc.a
>>> referenced by associate.m
>>>               associate.m.o:(cleanupReferenceList) in archive /usr/local/lib/libobjc.a
>>> referenced by associate.m
>>>               associate.m.o:(cleanupReferenceList) in archive /usr/local/lib/libobjc.a
>>> referenced 8 more times

ld: error: undefined symbol: __cxa_begin_catch
>>> referenced by eh_personality.c
>>>               eh_personality.c.o:(objc_begin_catch) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(test_cxx_eh_implementation) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: __cxa_end_catch
>>> referenced by eh_personality.c
>>>               eh_personality.c.o:(objc_end_catch) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(test_cxx_eh_implementation) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: objc_delete_weak_refs
>>> referenced by blocks_runtime.m
>>>               blocks_runtime.m.o:(_Block_object_dispose) in archive /usr/local/lib/libobjc.a
>>> referenced by blocks_runtime.m
>>>               blocks_runtime.m.o:(_Block_release) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: objc_autoreleaseReturnValue
>>> referenced by properties.m
>>>               properties.m.o:(objc_getProperty) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: std::type_info::~type_info()
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_class_type_info::~__objc_class_type_info()) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_class_type_info::~__objc_class_type_info()) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_id_type_info::~__objc_id_type_info()) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_id_type_info::~__objc_id_type_info()) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: operator delete(void*)
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_class_type_info::~__objc_class_type_info()) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_id_type_info::~__objc_id_type_info()) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: __dynamic_cast
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_class_type_info::__do_catch(std::type_info const*, void**, unsigned int) const) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_class_type_info::__do_catch(std::type_info const*, void**, unsigned int) const) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_class_type_info::__do_catch(std::type_info const*, void**, unsigned int) const) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_id_type_info::__do_catch(std::type_info const*, void**, unsigned int) const) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_id_type_info::__do_catch(std::type_info const*, void**, unsigned int) const) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(objc_object_for_cxx_exception) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(objc_object_for_cxx_exception) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: typeinfo for std::type_info
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_class_type_info::__do_catch(std::type_info const*, void**, unsigned int) const) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_class_type_info::__do_catch(std::type_info const*, void**, unsigned int) const) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_class_type_info::__do_catch(std::type_info const*, void**, unsigned int) const) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_id_type_info::__do_catch(std::type_info const*, void**, unsigned int) const) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(gnustep::libobjc::__objc_id_type_info::__do_catch(std::type_info const*, void**, unsigned int) const) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(objc_object_for_cxx_exception) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(objc_object_for_cxx_exception) in archive /usr/local/lib/libobjc.a
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(typeinfo for gnustep::libobjc::__objc_type_info) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: __cxa_get_globals
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(objc_init_cxx_exception) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: __cxa_throw
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(cxx_throw()) in archive /usr/local/lib/libobjc.a

ld: error: undefined symbol: _Unwind_VRS_Get(_Unwind_Context*, _Unwind_VRS_RegClass, unsigned int, _Unwind_VRS_DataRepresentation, void*)
>>> referenced by objcxx_eh.cc
>>>               objcxx_eh.cc.o:(test_eh_personality) in archive /usr/local/lib/libobjc.a

ld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
cc: error: linker command failed with exit code 1 (use -v to see invocation)
*** Error code 1

Stop.
make: stopped in /root/install/cycalc

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging a pull request may close this issue.

3 participants