If you replace the %d in your snprintf statements with %x or %X it should print in proper hex (lowercase x for lowercase hex, uppercase X for my favorite - uppercase hex.)
Also, you probably won't need to print &GX2Init/&GX2Shutdown, since that will print the address of the variable that holds the address of the function.

It's hard to explain, but imagine you have a piece of paper with the location of the GX2Init function written on it. You don't want the location of the paper (&GX2Init), you want what is actually written on the paper (GX2Init).
As for IDA, I'm unsure why you'd want to cross-reference them like this but I suppose it could be done fairly easily. Just get the address of the function (for example, let's say it's 0x1500) then get the address of the library itself (I
think this is the same as the value returned by OSDynLoad_Acquire. Let's say it's 0x1000.) Subtracting the two should give you how far into the library your function is (0x500 in my example.) This address
should match up with IDA.
I should mention that this is all my speculation on what
should work. I see no reason why it wouldn't work, but hey, I've been wrong before ;3
Just out of curiosity, why are you checking?