discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: linking tool to use a framework : obj_send_msg error


From: Thomas Kupper
Subject: Re: linking tool to use a framework : obj_send_msg error
Date: Mon, 13 Apr 2009 22:43:31 +0200

Hey David,

I already set -std=c99 in GNUmake.preamble. Tried both ADDITIONAL_CFLAGS and .._OBJCFLAGS but in both cases the __VA_LIST_ macro isn't defined. Mmmh, I use gcc 4.3.
Do you have any other idea?

Thomas


On 13 Apr 2009, at 22:11, David Chisnall wrote:

On 13 Apr 2009, at 20:49, Thomas Kupper wrote:


There is probably some 'optimisation' in the framework calling the Apple runtime message send function directly (the quotes because anything doing I/O like this is likely to gain an imperceptible performance increase from calling the runtime functions directly rather than using -methodForSelector:). Try grepping the source code for objc_msgSend() and, in files that contain it, add this macro:

#define objc_msgSend(theReceiver, theSelector, ...) \
objc_msg_lookup(theReceiver, theSelector)(theReceiver, theSelector, ## __VA_LIST__)


Perfect! That's exactly what causes the error. In one file there are three calls to objc_msgSend. Now I tried to define the macro you mentioned. Unfortunately the # __VA_LIST__ part is not recognized and Google wasn't any help, and neither was a find ... - exec fgrep ....

Sounds like you have your compiler set to use some archaic dialect of C. Add -std=c99 to your CFLAGS.

On the other hand, if there are only three calls to objc_msgSend in only one file I could maybe just replace these three calls. But the objc_msg_lookup calls seems to be quite unusal.

You can do that too, just expand the macro, so:

objc_msgSend(obj, sel, args);

becomes:

objc_msg_lookup(obj, sel)(obj, sel, args);

(objc_msg_lookup() returns a pointer to the function that you call. objc_msgSend() does the lookup and the call as a single operation in the Mac runtime).

David





reply via email to

[Prev in Thread] Current Thread [Next in Thread]