With libobjc2 installed on my Ubuntu system, a copy of your first.m files compiles for me with this line:
clang first.m `gnustep-config --objc-flags` `gnustep-config --objc-libs` \
-I /usr/include/GNUstep/ -lgnustep-base
but maybe it is simply a typo at the end of your command lines?
The -objc at the end of your first example and the -objc2 at the end of the second are instructing the clang compiler to create executables with names bjc and bjc2, respectively. Did you mean -lobj? I think linking in the obj library is critical for getting an Objective-C runtime library. Even with the libobjc2 project, the library produced is still named libobjc.so.x.y. If your command doesn't include a -lobjc, I don't see how it could ever link correctly. I could be wrong but it doesn't work for me without it.