try following this https://github.com/andreasfink/ulib/blob/master/doc/README-Debian13-trixie.txt
Note: you need to uninstall gnustep which comes with debian first if its installed > On 20 Jan 2026, at 18:50, Graham Lee <[email protected]> wrote: > > > 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>
