[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Building GNUstep for Windows using Clang
From: |
David Chisnall |
Subject: |
Re: Building GNUstep for Windows using Clang |
Date: |
Sat, 28 Nov 2020 12:54:51 +0000 |
Thanks,
It looks like you’ve already raised a PR to fix many of these.
> On 26 Nov 2020, at 12:18, Frederik Seiffert <frederik@algoriddim.com> wrote:
>> Linking library libgnustep-base ...
>> lld-link: warning: obj/libgnustep-base.obj/GSLocale.m.o: locally defined
>> symbol imported: $_OBJC_CLASS_NSConstantString (defined in
>> obj/libgnustep-base.obj/GSString.m.o) [LNK4217]
>> ...
>
> These warnings (a couple pages of them) are probably harmless but maybe
> someone knows what they are about?
These are pretty-much unavoidable on Windows. In C/C++, you typically use a
macro to control dlimport / dlexport of various things depending on whether
you’re building the library or building something using the library. You can
do this in Objective-C now, but it requires annotating all of the classes in
-base, -gui. I think both of these projects already provide a macro that tells
you that you’re building the library itself, so maybe it’s not too painful.
>
>> lld-link: error: undefined symbol: objc_skip_type_qualifiers
>> lld-link: error: undefined symbol: objc_skip_typespec
>> lld-link: error: undefined symbol: objc_alignof_type
>> lld-link: error: undefined symbol: objc_sizeof_type
>> lld-link: error: undefined symbol: objc_layout_structure
>> lld-link: error: undefined symbol: objc_layout_structure_next_member
>> lld-link: error: undefined symbol: objc_layout_structure_get_info
>> lld-link: error: undefined symbol: objc_get_type_qualifiers
>> lld-link: error: undefined symbol: objc_promoted_size
>
> These were built as part of libobjc2 (encoding2.c), but they don’t seem to be
> exported in the DLL. Is encoding.h missing some export statements?
Yup, these were missing their OBJC_PUBLIC things. Actually, your PR put them
on the definitions, which might not be right - they probably should go in the
.h so that they become dlimport when not building libobjc2.
>
>> lld-link: error: undefined symbol: __gnustep_objc_personality_v0
>> >>> referenced by obj/libgnustep-base.obj/GSICUString.m.o:(.xdata)
>> >>> referenced by obj/libgnustep-base.obj/NSRegularExpression.m.o:(.xdata)
>> >>> referenced by
>> >>> obj/libgnustep-base.obj/NSRegularExpression.m.o:(GCC_except_table11)
>>
>> lld-link: error: undefined symbol: __declspec(dllimport)
>> _objc_class_for_boxing_foreign_exception
>> >>> referenced by
>> >>> obj/libgnustep-base.obj/CXXException.m.o:(_c_CXXException__load)
>>
>> lld-link: error: undefined symbol: __declspec(dllimport) _objc_weak_load
>> >>> referenced by obj/libgnustep-base.obj/NSObject.m.o:(_c_NSObject__load)
>>
>> lld-link: error: undefined symbol: __declspec(dllimport) _objc_load_callback
>> >>> referenced by obj/libgnustep-base.obj/objc-load.m.o:(GSPrivateLoadModule)
>
> Not sure about these…
Neither am I. These are used for DWARF exception handling, which we shouldn’t
be doing on Windows. It may be that we get them from using a MinGW or Cygwin
target triple when building GNUstep?
David