Hey guys,
My name is Gregory Casamento. I am the lead developer of the GNUstep project. I am getting the following errors when building libobjc2 (by David Chisnall) on mingw64:
[100%] Linking C shared library libobjc.dll
Warning: corrupt .drectve at end of def file
C:/msys64/mingw64/bin/ld: cannot export objc_enumerationMutation: symbol wrong type (2 vs 3)
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(objc_msgSend.S.obj):C:/msys64/home/gregc/gnustep/libobjc2/objc_msgSend.x86-64.S:292: undefined reference to `__guard_dispatch_icall_fptr'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(objc_msgSend.S.obj):C:/msys64/home/gregc/gnustep/libobjc2/objc_msgSend.x86-64.S:296: undefined reference to `__guard_dispatch_icall_fptr'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(NSBlocks.m.obj):NSBlocks.m:(.xdata+0x10): undefined reference to `__gnustep_objc_personality_v0'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(Protocol2.m.obj):Protocol2.m:(.data+0xd0): undefined reference to `.objc_selector_conformsTo:_i240:816'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(Protocol2.m.obj):Protocol2.m:(.data+0xe8): undefined reference to `.objc_selector_retain_160:8'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(Protocol2.m.obj):Protocol2.m:(.data+0x100): undefined reference to `.objc_selector_release_v160:8'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(Protocol2.m.obj):Protocol2.m:(.data+0x118): undefined reference to `.objc_selector_self_160:8'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(associate.m.obj):C:/msys64/home/gregc/gnustep/libobjc2/associate.m:134: undefined reference to `.objc_selector_copy_160:8'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(associate.m.obj): in function `setReference':
C:/msys64/home/gregc/gnustep/libobjc2/associate.m:177: undefined reference to `objc_begin_catch'
C:/msys64/mingw64/bin/ld: C:/msys64/home/gregc/gnustep/libobjc2/associate.m:182: undefined reference to `objc_end_catch'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(associate.m.obj):associate.m:(.xdata+0x20): undefined reference to `__gnustep_objc_personality_v0'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(associate.m.obj):associate.m:(.xdata+0x108): undefined reference to `__gnustep_objc_personality_v0'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(associate.m.obj):associate.m:(.xdata+0x140): undefined reference to `__gnustep_objc_personality_v0'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(properties.m.obj):C:/msys64/home/gregc/gnustep/libobjc2/properties.m:59: undefined reference to `.objc_selector_copy_160:8'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(properties.m.obj): in function `objc_setProperty':
C:/msys64/home/gregc/gnustep/libobjc2/properties.m:66: undefined reference to `.objc_selector_copy_160:8'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(properties.m.obj):C:/msys64/home/gregc/gnustep/libobjc2/properties.m:109: undefined reference to `.objc_selector_copy_160:8'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(properties.m.obj):C:/msys64/home/gregc/gnustep/libobjc2/properties.m:135: undefined reference to `.objc_selector_copy_160:8'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(properties.m.obj):properties.m:(.xdata+0xd0): undefined reference to `__gnustep_objc_personality_v0'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(properties.m.obj):properties.m:(.xdata+0x110): undefined reference to `__gnustep_objc_personality_v0'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:366: undefined reference to `.objc_selector_dealloc_v160:8'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:402: undefined reference to `.objc_selector__ARCCompatibleAutoreleasePool_'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj): in function `initAutorelease':
C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:407: undefined reference to `.objc_selector_new_'
C:/msys64/mingw64/bin/ld: C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:409: undefined reference to `.objc_selector_release_'
C:/msys64/mingw64/bin/ld: C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:411: undefined reference to `.objc_selector_addObject:_'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:517: undefined reference to `.objc_selector_new_'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj): in function `autorelease(objc_object*)':
C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:444: undefined reference to `.objc_selector_addObject:_'
C:/msys64/mingw64/bin/ld: C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:448: undefined reference to `.objc_selector_autorelease_160:8'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:533: undefined reference to `.objc_selector_release_'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj): in function `release(objc_object*)':
C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:388: undefined reference to `.objc_selector_release_v160:8'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj): in function `retain(objc_object*, int)':
C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:322: undefined reference to `.objc_selector_retain_160:8'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj): in function `weakRefRelease((anonymous namespace)::WeakRef*)':
C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:742: undefined reference to `operator delete(void*)'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj): in function `incrementWeakRefCount(objc_object*)':
C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:800: undefined reference to `operator new(unsigned long long)'
C:/msys64/mingw64/bin/ld: C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:800: undefined reference to `operator delete(void*)'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj): in function `(anonymous namespace)::weakRefs()':
C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:692: undefined reference to `__cxa_guard_acquire'
C:/msys64/mingw64/bin/ld: C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:692: undefined reference to `__cxa_guard_release'
C:/msys64/mingw64/bin/ld: C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:692: undefined reference to `__cxa_guard_abort'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj): in function `weakRefRelease((anonymous namespace)::WeakRef*)':
C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:742: undefined reference to `operator delete(void*)'
C:/msys64/mingw64/bin/ld: C:/msys64/home/gregc/gnustep/libobjc2/arc.mm:742: undefined reference to `operator delete(void*)'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj): in function `operator()':
C:/msys64/home/gregc/gnustep/libobjc2/third_party/robin-map/include/tsl/robin_hash.h:510: undefined reference to `std::terminate()'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj): in function `tsl::detail_robin_hash::robin_hash<std::pair<void const*, (anonymous namespace)::WeakRef*>, tsl::robin_map<void const*, (anonymous namespace)::WeakRef*, std::hash<void const*>, std::equal_to<void const*>, (anonymous namespace)::malloc_allocator<std::pair<void const*, (anonymous namespace)::WeakRef*> >, false, tsl::rh::prime_growth_policy>::KeySelect, tsl::robin_map<void const*, (anonymous namespace)::WeakRef*, std::hash<void const*>, std::equal_to<void const*>, (anonymous namespace)::malloc_allocator<std::pair<void const*, (anonymous namespace)::WeakRef*> >, false, tsl::rh::prime_growth_policy>::ValueSelect, std::hash<void const*>, std::equal_to<void const*>, (anonymous namespace)::malloc_allocator<std::pair<void const*, (anonymous namespace)::WeakRef*> >, false, tsl::rh::prime_growth_policy>::static_empty_bucket_ptr()':
C:/msys64/home/gregc/gnustep/libobjc2/third_party/robin-map/include/tsl/robin_hash.h:1371: undefined reference to `__cxa_guard_acquire'
C:/msys64/mingw64/bin/ld: C:/msys64/home/gregc/gnustep/libobjc2/third_party/robin-map/include/tsl/robin_hash.h:1371: undefined reference to `__cxa_guard_release'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj): in function `std::vector<tsl::detail_robin_hash::bucket_entry<std::pair<void const*, (anonymous namespace)::WeakRef*>, false>, (anonymous namespace)::malloc_allocator<tsl::detail_robin_hash::bucket_entry<std::pair<void const*, (anonymous namespace)::WeakRef*>, false> > >::_S_check_init_len(unsigned long long, (anonymous namespace)::malloc_allocator<tsl::detail_robin_hash::bucket_entry<std::pair<void const*, (anonymous namespace)::WeakRef*>, false> > const&)':
C:/msys64/mingw64/include/c++/11.2.0/bits/stl_vector.h:1770: undefined reference to `std::__throw_length_error(char const*)'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):arc.mm:(.xdata+0x28): undefined reference to `__gnustep_objcxx_personality_v0'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):arc.mm:(.xdata+0x11c): undefined reference to `__gnustep_objcxx_personality_v0'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):arc.mm:(.xdata+0x160): undefined reference to `__gnustep_objcxx_personality_v0'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):arc.mm:(.xdata+0x188): undefined reference to `__gnustep_objcxx_personality_v0'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):arc.mm:(.xdata+0x1c8): undefined reference to `__gnustep_objcxx_personality_v0'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):arc.mm:(.xdata+0x204): more undefined references to `__gnustep_objcxx_personality_v0' follow
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):arc.mm:(.text$__clang_call_terminate[__clang_call_terminate]+0x5): undefined reference to `__cxa_begin_catch'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):arc.mm:(.text$__clang_call_terminate[__clang_call_terminate]+0xa): undefined reference to `std::terminate()'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):arc.mm:(.xdata$_ZNK3tsl2rh19prime_growth_policy15bucket_for_hashEy+0x8): undefined reference to `__gnustep_objcxx_personality_v0'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj): in function `tsl::rh::prime_growth_policy::next_bucket_count() const':
C:/msys64/home/gregc/gnustep/libobjc2/third_party/robin-map/include/tsl/robin_growth_policy.h:300: undefined reference to `std::terminate()'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj): in function `prime_growth_policy':
C:/msys64/home/gregc/gnustep/libobjc2/third_party/robin-map/include/tsl/robin_growth_policy.h:282: undefined reference to `std::terminate()'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):arc.mm:(.xdata$_ZNSt11_Tuple_implILy0EJOPKvEEC2EOS3_+0x8): undefined reference to `__gnustep_objcxx_personality_v0'
C:/msys64/mingw64/bin/ld: CMakeFiles/objc.dir/objects.a(arc.mm.obj):arc.mm:(.xdata$_ZNSt5tupleIJOPKvEEC2IJS1_ELb1ELb1EEEDpOT_+0x8): undefined reference to `__gnustep_objcxx_personality_v0'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [CMakeFiles/objc.dir/build.make:496: libobjc.dll] Error 1
make[1]: *** [CMakeFiles/Makefile2:84: CMakeFiles/objc.dir/all] Error 2
make: *** [Makefile:156: all] Error 2
.... done ....
gregc@mother-vm-win MINGW64 ~/gnustep/libobjc2
$
I am confused about the “.objc_…” references. I understand that the code which generates this is here clang/lib/CodeGen/CGObjCGNU.cpp. I am not sure, however, what to change here to fix this.
Thank you in advance for any guidance you can provide.
Yours, GC