g++ linking problem...

I use Solaris 10, compiling with a custom g++ (3.4.6) and GNU binutils (2.17). Things have gone well on two different systems, but when I tried moving to a third, it all fell over. Basically, it is now using the CC linker, but I need to use options not available to it. I believe I have found the root of the problem, but I do not understand what could cause this, or how best to fix it.

From a system that works:

$ which g++ ; g++ -v ; g++ -print-search-dirs | grep '^program'
/usr/local/bin/g++
Reading specs from /usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/specs
Configured with: ./configure --with-gnu-ld
Thread model: posix
gcc version 3.4.6
programs: =/usr/local/libexec/gcc/sparc-sun-solaris2.10/3.4.6/:/usr/local
/libexec/gcc/sparc-sun-solaris2.10/3.4.6/:/usr/local/libexec/gcc/sparc-
sun-solaris2.10/:/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/:/usr/local
/lib/gcc/sparc-sun-solaris2.10/:/usr/libexec/gcc/sparc-sun-solaris2.10/3.4.6
/:/usr/libexec/gcc/sparc-sun-solaris2.10/:/usr/lib/gcc/sparc-sun-solaris2.10
/3.4.6/:/usr/lib/gcc/sparc-sun-solaris2.10/:/usr/local/lib/gcc/sparc-
sun-solaris2.10/3.4.6/../../../../sparc-sun-solaris2.10/bin/sparc-
sun-solaris2.10/3.4.6/:/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/../../../..
/sparc-sun-solaris2.10/bin/:/usr/ccs/bin/sparc-sun-solaris2.10/3.4.6/:/usr
/ccs/bin/
$ ls -l /usr/local/libexec/gcc/sparc-sun-solaris2.10/3.4.6/
total 39734
lrwxrwxrwx   1 bin      bin           39 Nov 20  2008 as -> /usr/local/sparc-sun-solaris2.10/bin/as
-rwxr-xr-x   1 bin      bin      6175052 Sep  5  2006 cc1
-rwxr-xr-x   1 bin      bin      7182392 Sep  5  2006 cc1plus
-rwxr-xr-x   1 bin      bin       329698 Nov 20  2008 collect2
-rwxr-xr-x   1 bin      bin      6609028 Sep  5  2006 f771
drwxr-xr-x   2 bin      bin          512 Nov 17  2008 install-tools
lrwxrwxrwx   1 bin      bin           39 Nov 20  2008 real-ld -> /usr/local/sparc-sun-solaris2.10/bin/ld

On the system that does not work:

$ which g++ ; g++ -v ; g++ -print-search-dirs | grep '^program'
/usr/local/bin/g++
Reading specs from /usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/specs
Configured with: ./configure --with-gnu-ld
Thread model: posix
gcc version 3.4.6
programs: =/usr/sfw/sparc-sun-solaris2.10/../../libexec/gcc/sparc-
sun-solaris2.10/3.4.6/:/usr/sfw/sparc-sun-solaris2.10/../../libexec/gcc/:
/usr/sfw/sparc-sun-solaris2.10/bin/sparc-sun-solaris2.10/3.4.6/:/usr
/sfw/sparc-sun-solaris2.10/bin/:/usr/local/libexec/gcc/sparc-sun-solaris2.10
/3.4.6/:/usr/local/libexec/gcc/sparc-sun-solaris2.10/3.4.6/:/usr/local/libexec
/gcc/sparc-sun-solaris2.10/:/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6
/:/usr/local/lib/gcc/sparc-sun-solaris2.10/:/usr/libexec/gcc/sparc-
sun-solaris2.10/3.4.6/:/usr/libexec/gcc/sparc-sun-solaris2.10/:/usr/lib/gcc
/sparc-sun-solaris2.10/3.4.6/:/usr/lib/gcc/sparc-sun-solaris2.10/:/usr
/sfw/sparc-sun-solaris2.10/bin/../../sparc-sun-solaris2.10/bin/sparc-
sun-solaris2.10/3.4.6/:/usr/sfw/sparc-sun-solaris2.10/bin/../../sparc-
sun-solaris2.10/bin/:/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/../../../..
/sparc-sun-solaris2.10/bin/sparc-sun-solaris2.10/3.4.6/:/usr/local/lib/gcc
/sparc-sun-solaris2.10/3.4.6/../../../../sparc-sun-solaris2.10/bin/:/usr/ccs
/bin/sparc-sun-solaris2.10/3.4.6/:/usr/ccs/bin/
$ ls -l /usr/local/libexec/gcc/sparc-sun-solaris2.10/3.4.6/
total 39985
lrwxrwxrwx   1 root     root          37 Jun 11 10:36 as -> /usr/sfw/sparc-sun-solaris2.10/bin/as
-rwxr-xr-x   1 bin      bin      6175052 Sep  4  2006 cc1
-rwxr-xr-x   1 bin      bin      7182392 Sep  4  2006 cc1plus
-rwxr-xr-x   1 bin      bin       227256 Sep  4  2006 collect2
-rwxr-xr-x   1 bin      bin      6609028 Sep  4  2006 f771
drwxr-xr-x   2 bin      bin            5 May 14 11:24 install-tools
lrwxrwxrwx   1 root     root          37 Jun 11 10:36 real-ld -> /usr/sfw/sparc-sun-solaris2.10/bin/ld

The contents of /usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6/specs are identical between the two, and all the packages and package details (pkginfo) appear to be identical. The critical difference is that, in the system that is not working, the program search dirs are `wrong'. Even though it is a copy of the same g++, it seems as though some `prefix' is different between the two environments: on the system that works, it checks /usr/local/libexec/gcc/sparc-sun-solaris2.10/3.4.6/, whereas the other checks /usr/sfw/sparc-sun-solaris2.10/../../libexec/gcc/sparc-sun-solaris2.10/3.4.6/.

What could cause this difference, and what is the best resolution to this issue?

EDIT: I forgot to mention, I have tried the -B option with g++, as well as GCC_EXEC_PREFIX and COMPILER_PATH, with no success.