Re: Static variables reset inside CFPlugin code
Re: Static variables reset inside CFPlugin code
- Subject: Re: Static variables reset inside CFPlugin code
- From: Grandinetti Philip <email@hidden>
- Date: Mon, 02 Jan 2012 21:27:10 -0500
Hi Jens,
Thanks for your patience. I'm getting a better understanding. Also, it helped a bit reading through ...
http://developer.apple.com/library/mac/#documentation/developertools/conceptual/MachOTopics
and
http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/DynamicLibraries
However, I'm still not sure what is the right way to do this. I have made the pointer global (no long declared as "static"),...
CFMutableSetRef unitsLibrary = NULL;
in my "Units" static library. The main app begins using the "Units" library at startup and starts filling this set. Then, eventually the plugin gets loaded. In the plugin factory function I added ...
CFBundleRef bundle = CFBundleGetMainBundle();
CFMutableSetRef *pointer = CFBundleGetDataPointerForName (bundle,CFSTR("unitsLibrary"));
PSUnitSetLibrary(*pointer);
and this works! The plugin now "knows" about all the previous units that were defined in the main app.
But I'm troubled by this solution. If I set debugger break points in the "Units" library the debugger no longer stops at those breakpoints when called by the plugin, but it does stop at those breakpoints when called by the main app. Makes me think I have two copies of code for my static units library running after the plugin is loaded. Does that make sense?
Philip
On Jan 2, 2012, at 1:22 PM, Jens Alfke wrote:
>
> On Jan 2, 2012, at 7:52 AM, Grandinetti Philip wrote:
>
>> You raise a fundamental issue that I admit I don't completely understand. What are the differences between linking against a static library versus a framework. If I turned all my static libraries into a framework would the plugin see the static variables in the framework without having to do all the Xcode linking magic?
>
> The difference is copying vs. referencing. A static library gets copied into the target at link time, whereas if you link with a dynamic library or framework, the linker just notes down what symbols are referenced, and at load time those get resolved to those symbols in the library.
>
> For your purposes, the difference is that in a static library, everything that links with it has its own private copy of the library's global variables. In a dylib/framework, everything that links with it shares its global variables. The latter is what you want.
>
> —Jens
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden