opensubscriber
   Find in this group all groups
 
Unknown more information…

g : gnustep-dev@gnu.org 19 May 2012 • 1:41AM -0400

Re: Getting Objective-C 2.0 working
by Laurent Michel

REPLY TO AUTHOR
 
REPLY TO GROUP




I'm answering my own email.....

On http://wwwmain.gnustep.org/resources/downloads.php?site=ftp%3A%2F%2Fftp.gnustep.org%2Fpub%2Fgnustep%2F

Do *not* use GNUstep-startup

Download the four individual packages (Make/Base/GUI/Backend) and

#1 : compile / install make
#2 : compile / install libobjc2
#3 : compile / install the three remaining (Base/Gui/Backend)

Enjoy!

It works ;-)

Very happy camper.

--
  Laurent


PS/ Only issue I have now is in my code:

Calling [GSMutableSet -enumerateObjectsUsingBlock:] with incorrect signature.  Method has v12@0:4^{?=^vii^?}8, selector has v12@0:4@?8


This happens when the following runs (and that runs fine on MacOS 10.7.x)

-(float)varOrdering:(id<CPIntVar>)x
{
   __block float h = 0.0;
   NSSet* theConstraints = _cv[[x getId]];  
   [theConstraints enumerateObjectsUsingBlock:^void(id obj, BOOL *stop) {
      if ([obj nbUVars] - 1 > 0)
         h += _w[[obj getId]];
   }];
   return h / [x domsize];
}


That enumerateObjects looks innocuous to me.






On May 18, 2012, at 12:03 PM, Laurent Michel wrote:

> Dear Eric (and everybody else reading! ;-)),
>
> One more question, if I can abuse of your time some more....
>
> To make a long story short, I apparently failed to get GNUstep compiled with the newer libobjc2 runtime you pointed me at, but my own
> code does compile against that runtime. However, my code does not link succesfully against the GNUstep I cobbled together on Ubuntu.
>
> Any attempt to build GNUstep with the gcc tool suite pulls a different (older) libobjc runtime and the two are incompatible. So I eventually decide to remove all the tools that came with ubuntu and try to build GNUstep with clang.
>
> Note that I successfully build the libobjc2 you pointed me to.
>
> To attempt a build of GNUstep:
>
> 1. export CC=clang
> 2. ./InstallGNUstep
>
> Step #2 fails to succesffully configure GNUstep though. Here is the report it produces at the end:
>
> * Startup configuration report                                      *
> *********************************************************************
> --------------------------------------------------------------
> W107 Warning
> No XML library support was found. The GNUstep uses XML for many basic
> functions, such as reading/writing property lists. XML will automatically
> be disabled, but this is probably not what you want. If possible you should
> stop installation and install an xml library.
> --------------------------------------------------------------
> W125 Warning
> The OpenSSL package (libcrypto, etc) is needed to access https connections
> with NSURL and for other purposes. This package is optional so you are
> not required to install it.
> --------------------------------------------------------------
> E150 Error
> You do not have the GNU Objective-C compiler installed
> Check to make sure you have a full installation of the GCC
> compiler that includes the Objective-C headers and libraries
> --------------------------------------------------------------
> W272 Warning
> You do not have a recent version of the libobjc library. Startup
> will install one.
> --------------------------------------------------------------
> E281 Error
> I don't seem to be able to use your Objective-C compiler to produce
> working binaries!  Please check your Objective-C compiler installation.
> For gcc-3.0.x make sure that your compiler's libgcc_s and libobjc
> can be found by the dynamic linker - usually that requires you to add
> the directory given by gcc -print-file-name=libobjc.so to your
> LD_LIBRARY_PATH or /etc/ld.so.conf.
>
>
> However:
> 1. I do have libxml2 and libxml2-dev
> 2. I do lhave libopenssl and its dev package as well
> 3. Scrolling up, I can see that the configure invoked by this script did try to use clang.
>
> For instance:
>
> checking for library combo... gnu-gnu-gnu
> checking for prefix... checking for gcc... clang
> checking whether the C compiler works... yes
> checking for C compiler default output file name... a.out
> checking for suffix of executables...
> checking whether we are cross compiling... no
> checking for suffix of object files... o
> checking whether we are using the GNU C compiler... yes
> checking whether clang accepts -g... yes
> checking for clang option to accept ISO C89... none needed
> checking how to run the C preprocessor... clang -E
> configure: Configuring on linux-gnu
> checking compiler version... gcc major version is 4
> checking for apple compiler... no
> checking for ar... ar
> checking for ld... ld
> checking for dlltool... no
> checking for gawk... no
> checking for awk... awk
> checking for patch... patch
> checking for ranlib... ranlib
> checking for a BSD-compatible install... /usr/bin/install -c
> checking whether ln -s works... yes
> checking for whoami... /usr/bin/whoami
> checking for gmake... no
> checking for make... make
> checking make version > 3.75... yes GNU Make 3.81
> checking broken make... ok
> checking binutils version > 2.9... yes GNU ld (GNU Binutils for Ubuntu) 2.22
> checking iconv version > 2.1... yes 2.15
> checking iconv support... yes, in libc
> checking for xml2-config... /usr/bin/xml2-config
> checking for libxml - version >= 2.3.0... no
> *** Could not run libxml test program, checking why...
> checking the Objective-C runtime... GNU
>
>
> It also says it is going to try to use the GNU version of the objective-C runtime. So I suspect that he can't locate the newer one I gave
> even though I added it in ldconfig:
>
> root@ubuntu:/usr/local/src/gnustep-startup-0.28.0# ldconfig -p|grep objc
> libobjcxx.so.4.6.0 (libc6) => /usr/local/lib/libobjcxx.so.4.6.0
> libobjcxx.so.4.6 (libc6) => /usr/local/lib/libobjcxx.so.4.6
> libobjcxx.so.4 (libc6) => /usr/local/lib/libobjcxx.so.4
> libobjcxx.so (libc6) => /usr/local/lib/libobjcxx.so
> libobjc.so.4.6.0 (libc6) => /usr/local/lib/libobjc.so.4.6.0
> libobjc.so.4.6 (libc6) => /usr/local/lib/libobjc.so.4.6
> libobjc.so.4 (libc6) => /usr/local/lib/libobjc.so.4
> libobjc.so (libc6) => /usr/local/lib/libobjc.so
>
>
> So it is present.
>
> I checked the header and:
>
> root@ubuntu:/usr/local/src/gnustep-startup-0.28.0/build# updatedb
> root@ubuntu:/usr/local/src/gnustep-startup-0.28.0/build# locate objc.h
> /usr/local/include/objc/objc.h
> /usr/local/src/libobjc2-1.6/objc/objc.h
>
> Namely, there is only one objc.h (the good one)
>
>
> Looking inside the log, I see:
>
> configure:6154: checking whether objc has thread support
> configure:6186: clang -o conftest -g -O2 -x objective-c -I/usr/local/src/gnustep-startup-0.28.0 -fgnu-runtime   conftest.c -lobjc -lpthread >&5
> In file included from conftest.c:14:
> /usr/local/src/gnustep-startup-0.28.0/config/config_thread.m:5:10: fatal error: 'objc/NXConstStr.h' file not found
> #include <objc/NXConstStr.h>
>          ^
> 1 error generated.
> configure:6186: $? = 1
> configure: program exited with status 1
> configure: failed program was:
> | /* confdefs.h */
> | #define PACKAGE_NAME "GNUstep Setup"
> | #define PACKAGE_TARNAME "gnustep-setup"
> | #define PACKAGE_VERSION "0.20.0"
> | #define PACKAGE_STRING "GNUstep Setup 0.20.0"
> | #define PACKAGE_BUGREPORT "bug-gnustep@gnu...."
> | #define PACKAGE_URL ""
> | #define HAVE_ICONV 1
> | #define HAVE_OPENSSL_SSL_H 1
> | #define HAVE_LIBCRYPTO 1
> | #define HAVE_OBJC_OBJC_H 1
> | #define HAVE_CALLBACK_H 1
> | /* end confdefs.h.  */
> | #include "/usr/local/src/gnustep-startup-0.28.0/config/config_thread.m"
> configure:6348: result: no
>
> and /usr/local/include/objc does not contain anything named NXConstStr.h
>
> root@ubuntu:/usr/local/src/gnustep-startup-0.28.0/build# ls /usr/local/include/objc/
> Availability.h    capabilities.h  encoding.h  objc-api.h  objc-auto.h  Object.h    runtime-deprecated.h  slot.h
> blocks_runtime.h  developer.h     hooks.h     objc-arc.h  objc.h       Protocol.h  runtime.h             toydispatch.h
>
> So... what is going on ? is the configure picking the wrong runtime?
>
> Any hint at how to diagnose this?
>
> Thanks again!
>
>
>
> (Aside on the XML / openssl issue)
>
>
> (For XML:
> I have libxml2 installed (including dev package of course). The configuration fails though with this in the log for libxml2:
>
> configure:4208: checking for xml2-config
> configure:4226: found /usr/bin/xml2-config
> configure:4239: result: /usr/bin/xml2-config
> configure:4293: checking for libxml - version >= 2.3.0
> configure:4472: gcc -o conftest -g -O2 -I/usr/include/libxml2   conftest.c /i386-linux-gnu -lxml2  >&5
> gcc: error: /i386-linux-gnu: No such file or directory
>
> The compilation command constructed is clearly incorrect.
>
> Then I have a second error related to openssl:
>
> configure:4989: gcc -o conftest -g -O2   conftest.c -lsocket  -lcrypto  >&5
> /usr/bin/ld: cannot find -lsocket
>
> There is no socket lib. sockets are part of libc no?
> )
>
>
>
>
>
> On May 17, 2012, at 11:09 PM, Eric Wasylishen wrote:
>
>> Hi Laurent,
>>
>> To use blocks in GNUstep you need to use the GNUstep Objective-C runtime, a.k.a. libobjc2, whose releases are available here: http://download.gna.org/gnustep/  
>>
>> Unfortunately, I don't think this library is available in debian/ubuntu (though I could be wrong!). Confusingly, the package called "libobjc2" in debian/ubuntu is unrelated to the GNUstep Objective-C runtime and doesn't support blocks.
>>
>> So, as far as I know, what you'll need to do is remove the Ubuntu packages for gnustep you installed, then install libobjc2 and GNUstep again from the source packages. (Latest gnustep releases are at: http://wwwmain.gnustep.org/resources/downloads.php)
>>
>>
>> The Etoile ObjectiveC2 framework no longer exists and isn't something you need to worry about. IIRC, the initial support in GNUstep for the modern Objective-C runtime api's was started in that framework in Etoile, but that code has since been merged into GNUstep and libobjc2.
>>
>> Hope this helps,
>>
>> Eric
>>
>> On 2012-05-17, at 9:27 PM, Laurent Michel wrote:
>>
>>> Dear All,
>>>
>>> I develop on MaOS and would love to port my code to Linux. Essentially, I use Objective-C 2.0 with clang as a compiler.
>>> I created an Ubuntu 12.04 VM under VMWare and installed GNUStep through that channel. I compiled a silly hello world and that worked fine.
>>> My problems started when I tried to compile my own code which makes *heavy* use of Objective-C blocks. I always end-up seeing this message:
>>>
>>> clang -I/usr/GNUstep/System/Library/Headers  -fblocks -fobjc-nonfragile-abi -c CPFactory.m
>>> In file included from CPFactory.m:27:
>>> In file included from ./CPFactory.h:27:
>>> In file included from /usr/GNUstep/System/Library/Headers/Foundation/Foundation.h:30:
>>> /usr/GNUstep/System/Library/Headers/GNUstepBase/GSVersionMacros.h:287:14: fatal error: 'objc/blocks_runtime.h' file not found
>>>
>>>
>>> namely, it cannot find objc/blocks_runtime.h
>>>
>>> I started googling around and I found lots of conflicting information on the topic as well as reference to Etoile, and ObjectiveC2 (a framework) but it seems largely incompatible with GNUStep. I'll looking for some directions to get going with a simple code that uses blocks. For instance, a silly test like:
>>>
>>> #import <Foundation/NSObject.h>
>>>
>>> int foo(int (^b)(int)) {
>>>  return b(5);
>>> }
>>>
>>> int main() {
>>>
>>>  int y = 10;
>>>  int z = foo(^(int x) {
>>> return y + x;
>>>     });
>>>  NSLog(@"result is %d\n",z);
>>> }
>>>
>>>
>>> Should compile and run when linked against the Foundation framework.
>>>
>>> Any pointer is greatly appreciated.
>>>
>>> --
>>> Laurent
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Gnustep-dev mailing list
>>> Gnustep-dev@gnu....
>>> https://lists.gnu.org/mailman/listinfo/gnustep-dev
>>
>
> _______________________________________________
> Gnustep-dev mailing list
> Gnustep-dev@gnu....
> https://lists.gnu.org/mailman/listinfo/gnustep-dev


Bookmark with:

Delicious   Digg   reddit   Facebook   StumbleUpon

Related Messages

opensubscriber is not affiliated with the authors of this message nor responsible for its content.