gnustep-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Building GNUstep for Windows using Clang


From: Frederik Seiffert
Subject: Re: Building GNUstep for Windows using Clang
Date: Tue, 19 Jan 2021 15:53:14 +0100

Hi all,

Another update on the Clang MSVC ABI support front (which I’m trying to get to 
work in addition to MinGW + Clang)...

I’ve been making some good progress and was able to build Base as a DLL with 
this setup. The necessary build system changes are on the following branches 
(work in progress), which I will clean up and submit as PRs when this is 
working:
https://github.com/gnustep/tools-make/tree/clang-msvc-support
https://github.com/gnustep/libs-base/tree/clang-msvc-support


However it seems that the generated gnustep-base.lib does not contain symbols 
for the ObjC classes. I’m getting linker errors for each ObjC class I am 
referencing in a test program:

> lld-link: error: undefined symbol: $_OBJC_REF_CLASS_NSArray
> >>> referenced by C:\Dev\tools-android\test.m:16
> >>>               C:\msys64\tmp\test-aef6cd.o:(WinMain)
> 
> lld-link: error: undefined symbol: __declspec(dllimport) 
> $_OBJC_CLASS_NSConstantString
> >>> referenced by C:\msys64\tmp\test-aef6cd.o:(.objc_early_init)

Is there some flag I need to pass to lld-link to ensure these are exported? I 
currently have -dll and -export-all-symbols. I also tried adding 
__declspec(dllexport) to the @interface declaration of these classes to no 
avail.


Regarding the previous issue:

> However, it fails checking for objc_sync_enter with the following linker 
> errors – any ideas what these could be about?

I am guessing these somehow happen because referencing ObjC built-ins in a C 
file doesn’t work on Windows. I’m planning to skip these config checks when 
using this setup.


Thanks,
Frederik


> Am 12.01.2021 um 21:47 schrieb Frederik Seiffert <frederik@algoriddim.com>:
> 
> Hi all,
> 
> As a second option I’ve been working on trying to build using the MSVC ABI 
> (i.e. without MinGW).
> 
> Using the latest Clang 11 from the LLVM website and Pthreads-win32, plus 
> removing -lm from target.make, I was able to get quite a bit further running 
> Base configure.
> 
> However, it fails checking for objc_sync_enter with the following linker 
> errors – any ideas what these could be about?
> 
>> configure:8038: checking for objc_sync_enter
>> configure:8038: /C/LLVM/bin/clang -o conftest.exe -g  
>> -I/c/GNUstep/MSVC/x64/include -I/c/GNUstep/MSVC/x64/include 
>> -I/c/GNUstep/MSVC/x64/include -I/c/GNUstep/MSVC/x64/include  -x objective-c 
>> -fuse-ld=lld -L/c/GNUstep/MSVC/x64/lib -L/c/GNUstep/MSVC/x64/lib 
>> -L/c/GNUstep/MSVC/x64/lib -L/c/GNUstep/MSVC/x64/lib conftest.c  -lpthread 
>> -fuse-ld=lld -pthread -fexceptions -fobjc-runtime=gnustep-2.0 -fblocks 
>> -L/home/Frederik -LSeiffert/GNUstep/Library/Libraries 
>> -L/c/GNUstep/MSVC/x64/lib -lobjc     >&5
>> conftest.c:119:6: warning: incompatible redeclaration of library function 
>> 'objc_sync_enter' [-Wincompatible-library-redeclaration]
>> char objc_sync_enter ();
>>     ^
>> conftest.c:119:6: note: 'objc_sync_enter' is a builtin with type 'int (id)'
>> 1 warning generated.
>> lld-link: error: relocation against symbol in discarded section: 
>> __start_.objcrt$SEL
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __stop.objcrt$SEL
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __start_.objcrt$CLS
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __stop.objcrt$CLS
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __start_.objcrt$CLR
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __stop.objcrt$CLR
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __start_.objcrt$CAT
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __stop.objcrt$CAT
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __start_.objcrt$PCL
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __stop.objcrt$PCL
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __start_.objcrt$PCR
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __stop.objcrt$PCR
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __start_.objcrt$CAL
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __stop.objcrt$CAL
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __start_.objcrt$STR
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> 
>> lld-link: error: relocation against symbol in discarded section: 
>> __stop.objcrt$STR
>>>>> referenced by C:\tmp\conftest-78a937.o:(.objc_init)
>> PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash 
>> backtrace.
>> 0.   Program arguments: C:\LLVM\bin\lld-link -out:conftest.exe 
>> -defaultlib:libcmt -libpath:C:\Program Files (x86)\Microsoft Visual 
>> Studio\2019\Professional\VC\Tools\MSVC\14.28.29333\lib\x64 
>> -libpath:C:\Program Files (x86)\Microsoft Visual 
>> Studio\2019\Professional\VC\Tools\MSVC\14.28.29333\atlmfc\lib\x64 
>> -libpath:C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\ucrt\x64 
>> -libpath:C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64 
>> -libpath:C:\LLVM\lib\clang\11.0.0\lib\windows 
>> -libpath:C:/GNUstep/MSVC/x64/lib -libpath:C:/GNUstep/MSVC/x64/lib 
>> -libpath:C:/GNUstep/MSVC/x64/lib -libpath:C:/GNUstep/MSVC/x64/lib 
>> -libpath:C:/msys64/home/Frederik -libpath:Seiffert/GNUstep/Library/Libraries 
>> -libpath:C:/GNUstep/MSVC/x64/lib -nologo -debug C:\tmp\conftest-76158a.o 
>> pthread.lib objc.lib 
> 
> 
>> configure:8038: result: no
>> configure:8052: error: The objc runtime library does not appear to have 
>> synchronisation support.  Try re-configuring gnustep-make with a CPPFLAGS 
>> variable containing a -L point to specify the directory containing the 
>> correct libobjc, or using the --with-objc-lib-flag=... option.
> 
> 
> Thanks,
> Frederik
> 
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]