Agreed, which is why I’m using clang in both base and make, and libobjc2. I 
still don’t understand this error.

Thanks,
Graham.

> On 20 Jan 2026, at 17:30, Andreas Fink <[email protected]> wrote:
> 
> 
> 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