[cfe-dev] Implementation of stdbool.h
Chris Lattner
clattner at apple.com
Thu Feb 28 22:18:06 PST 2008
On Feb 28, 2008, at 9:57 PM, Chris Lattner wrote:
>
> On Feb 28, 2008, at 11:53 AM, Keith Bauer wrote:
>
>>> The best way I know that avoids having to hard code the prefix into
>>> the executable is by making clang search the "../include/clang" path
>>> from its executable. Is there a good way to do this?
>>
>> On Mac OS X CFBundle knows how to find the absolute path of the
>> executable. On Linux one can read the symbolic link /proc/self/exe.
>> On Windows if you open an app from the GUI, the CWD is the one
>> containing the executable, but if you run it on the command-line
>> that's presumably not the case... and on other OSes, I don't know of
>> any way other than Gordon's suggestion of searching PATH for argv[0].
>
> Ok, I'll see what I can do with argv[0]. If this doesn't work on
> windows, hopefully someone working there can help :)
Actually, dladdr seems useful on unix'y systems. Does this work on
linux?
----
#include <stdio.h>
#include <dlfcn.h>
int main() {
Dl_info info;
int err;
printf("%d\n", err = dladdr(main, &info));
if (err == 0)
printf("**error**\n");
else
printf("%s\n", info.dli_fname);
}
----
$ gcc t.c
$ ./a.out
1
/Users/sabre/Desktop/./a.out
One issue is that this requires reading through symlinks I guess:
$ cd ..
$ ln -s Desktop/a.out something
$ ./something
1
/Users/sabre/./something
It would have been nice if that printed /Users/sabre/Desktop/./a.out.
-Chris
More information about the cfe-dev
mailing list