Re: Problem having a framework working in one of my targets (a screensaver)
Re: Problem having a framework working in one of my targets (a screensaver)
- Subject: Re: Problem having a framework working in one of my targets (a screensaver)
- From: Roland King <email@hidden>
- Date: Fri, 03 Jul 2015 21:57:23 +0800
Downloading the zip file referenced earlier and using a simple main.c
$ clang -x c -o main.o -c main.c
$ clang main.o -o main
$ otool -L main
main:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
adding the framework right from the unzipped zip and then otool’ing it
$ clang main.o -F ~/Downloads/Mac-Framework-master -framework Paddle -o main
$ otool -L main
main:
@executable_path/../Frameworks/Paddle.framework/Versions/A/Paddle (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
That’s that @executable_path from the library, using otool -D on it ...
$ otool -D ~/Downloads/Mac-Framework-master/Paddle.framework/Paddle
/Users/rols/Downloads/Mac-Framework-master/Paddle.framework/Paddle:
@executable_path/../Frameworks/Paddle.framework/Versions/A/Paddle
now update it and check it again
$ install_name_tool -id @rpath/bananas/are/tasty ~/Downloads/Mac-Framework-master/Paddle.framework/Paddle
$ otool -D ~/Downloads/Mac-Framework-master/Paddle.framework/Paddle
/Users/rols/Downloads/Mac-Framework-master/Paddle.framework/Paddle:
@rpath/bananas/are/tasty
and re-link main and then otool it again
$ clang main.o -F ~/Downloads/Mac-Framework-master -framework Paddle -o main
$ otool -L main
main:
@rpath/bananas/are/tasty (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
That’s where it comes from - that’s how you can change it. Don’t know what you’re seeing.
> On 3 Jul 2015, at 21:19, Kevin Meaney <email@hidden> wrote:
>
>>
>> I don’t know what the executable_path is for a screensaver, you’d think it was very much the same thing. So first simplest option is to work out what that is and then just put the library at the place it expects to be, @executable_path/../Frameworks/<lots of garbage>. As long as that’s within your bundle somewhere, trivial to do. You can even put it somewhere else and put a symlink in the bundle.
>
> The @executable_path for the Screen saver will be the path to the executable process that loads the OP’s screen saver plugin. in this case ScreenSaverEngine.
>
>>
>> If you want to change it to something like @rpath/whatever then
>>
>> install_name_tool -id @rpath/whatever <object>
>
> This is where I get confused. In my project not the original posters my framework has Installation Directory set to @rpath and everything works as I need it to thanks to that Mike Ash article. But if I do otool -D on the framework then I see @executable_path … etc. Making me conclude the rpath information was stored separately in the binary to the install name so my thinking was that modifying the install name wouldn’t help.
>
> Kevin
>
_______________________________________________
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