if you use libobjc2, you use clang. if you use old runtime, you use gcc. mixing 
code with old and new runtime will not work. Code using automatic reference 
counting must use clang and libobjc2 runtime.

As gnustep make defines compiler flags etc its important to use the right 
version of runtime flags.

> On 20 Jan 2026, at 18:12, Graham Lee <[email protected]> wrote:
> 
> Hi all,
> 
> I’m trying to compile GNUstep base inside a Guix environment. The Guix 
> GNUstep module 
> (https://codeberg.org/guix/guix/src/branch/master/gnu/packages/gnustep.scm) 
> is a bit of a mix; it defines a GNUstep make that’s configured with gcc, and 
> libobjc2 that needs clang. I’ve defined a package that inherits from their 
> GNUstep make but uses clang as the compiler, then a shell guix.scm 
> environment at the top-level of the libs-base checkout, to try and build 
> libs-base. The shell uses clang, libobjc2, and my GNUstep-make package 
> configured with clang.
> 
> It configures fine, but in make I get errors from the objc runtime headers, 
> shown below. Is this a mistake in configuring the package (it seems like it’s 
> trying to use both the local and the libobjc2 header for objc/runtime.h), or 
> did I get something else wrong? Does anyone have advice for me here?
> 
> Thanks,
> 
> Graham.
> 
> Making all for subproject ObjectiveC2...
>  Compiling file NSBlocks.m ...
> In file included from NSBlocks.m:19:
> ../../Headers/ObjectiveC2/objc/runtime.h:89:15: error: typedef redefinition 
> with different types ('void *' vs 'struct objc_property *')
> typedef void *objc_property_t;
>               ^
> /gnu/store/x7w055xaaqlpivfavr352kvcyg06qy04-profile/include/objc/runtime.h:150:31:
>  note: previous definition is here
> typedef struct objc_property* objc_property_t;
>                               ^
> […]
> 
> In file included from NSBlocks.m:19:
> ../../Headers/ObjectiveC2/objc/runtime.h:133:1: error: unknown type name 
> 'Method_t'; did you mean 'Method'?
> Method * class_copyMethodList(Class cls, unsigned int *outCount);
> ^~~~~~
> Method
> ../../Headers/ObjectiveC2/objc/runtime.h:84:17: note: expanded from macro 
> 'Method'
> #       define Method Method_t
>                       ^
> /gnu/store/x7w055xaaqlpivfavr352kvcyg06qy04-profile/include/objc/runtime.h:126:29:
>  note: 'Method' declared here
> typedef struct objc_method *Method;
>                             ^
> […]
> 
> NSBlocks.m:35:8: error: unknown type name 'objc_mutex_t'
> extern objc_mutex_t __objc_runtime_mutex;
>        ^
> NSBlocks.m:42:12: error: incomplete definition of type 'struct objc_class'
>   metaClass->class_pointer = superclass->class_pointer;
>   ~~~~~~~~~^
> /gnu/store/x7w055xaaqlpivfavr352kvcyg06qy04-profile/include/objc/runtime.h:84:16:
>  note: forward declaration of 'struct objc_class'
> typedef struct objc_class *Class;
>                ^
> 
> 
> <guix.scm>
  • M... Graham Lee
    • ... Andreas Fink via Discussion list for the GNUstep programming environment
      • ... Graham Lee
        • ... Andreas Fink via Discussion list for the GNUstep programming environment

Reply via email to