You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by Martin Sebor <se...@roguewave.com> on 2007/03/07 20:01:03 UTC

xlC link errors caused by commas in BUILDDIR

I've run into a linker error when building with IBM XLC++
in a directory whose name contains a comma (see below).
The problem is that we're passing the absolute pathname
of $BUILDDIR/lib to the linker via the -Wl compiler driver
option. This option uses the comma to separate individual
arguments from one another. I don't know if it's worth
trying to deal with this or not but I thought I'd mention
it in case someone else runs into the same problem or in
case Andrew has an idea for how to fix it.

Martin

$ nice gmake BUILDMODE=shared,debug 
BUILDDIR=/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug
GNUmakefile:289: "CONFIG not specified, using vacpp.config"
expr: 0402-050 Syntax error.
creating BUILDDIR=/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug
generating /build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/makefile.in 
from /amd/devco/sebor/stdcxx/etc/config/vacpp.config
expr: 0402-050 Syntax error.
gmake[1]: Entering directory 
`/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug'
gmake[2]: Entering directory 
`/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/include'
gmake config
gmake[3]: Entering directory 
`/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/include'

configuring for xlCcore- on aix-5.3

checking if the compiler is sane                   ok (invoked with xlCcore)
checking if the linker is sane                     ok (invoked with xlCcore)
...
gmake[2]: Entering directory 
`/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/examples'
xlCcore -c -I/amd/devco/sebor/stdcxx/include/ansi -D_RWSTDDEBUG 
-D_RWSTD_USE_CONFIG -I/amd/devco/sebor/stdcxx/include 
-I/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/include 
-I/amd/devco/sebor/stdcxx/examples/include  -g 
-qtemplateregistry=accumulate.ti 
/amd/devco/sebor/stdcxx/examples/manual/accumulate.cpp
xlCcore accumulate.o -o accumulate 
-I/amd/devco/sebor/stdcxx/include/ansi -D_RWSTDDEBUG 
-D_RWSTD_USE_CONFIG -liconv -brtl 
-L/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/lib -lstd 
-Wl,-bsvr4,-R/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/lib  -lm 
-qtemplateregistry=accumulate.ti
ld: 0706-005 Cannot find or open file: debug/lib
         ld:open(): A file or directory in the path name does not exist.
gmake[2]: *** [accumulate] Error 255
gmake[2]: Leaving directory 
`/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/examples'
gmake[1]: [examples] Error 2 (ignored)


Re: xlC link errors caused by commas in BUILDDIR

Posted by Martin Sebor <se...@roguewave.com>.
Andrew Black wrote:
> Greetings Martin.
> 
> For what it's worth, this isn't a problem restricted to XLC++.  My
> reading of the .config files indicates that the only compilers that
> won't be affected are the osf_cxx, Sunpro, reliant_cds, como and eccp
> compilers.  The first two compilers don't use a comma in the rpath
> option, and the remainder don't have an rpath switch defined.
> 
> It might be possible to alter the makefiles to mangle the path, escaping
> the comma, but I suspect that could cause other problems.  I would
> hazard a guess that spaces in the value of $BUILDDIR might also cause a
> number of problems.

Spaces in file names are known not to work on UNIX in general
because they are reserved by all utilities to separate command
line arguments and options. Commas are not reserved by most
utilities and they are handled fine in most cases so when they
don't work it's likely to be surprising to users, especially
if they don't cause any problems in archive builds (they don't
appear to).

Martin

> 
> --Andrew Black
> 
> Martin Sebor wrote:
>> I've run into a linker error when building with IBM XLC++
>> in a directory whose name contains a comma (see below).
>> The problem is that we're passing the absolute pathname
>> of $BUILDDIR/lib to the linker via the -Wl compiler driver
>> option. This option uses the comma to separate individual
>> arguments from one another. I don't know if it's worth
>> trying to deal with this or not but I thought I'd mention
>> it in case someone else runs into the same problem or in
>> case Andrew has an idea for how to fix it.
>>
>> Martin
>>
>> $ nice gmake BUILDMODE=shared,debug 
>> BUILDDIR=/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug
>> GNUmakefile:289: "CONFIG not specified, using vacpp.config"
>> expr: 0402-050 Syntax error.
>> creating BUILDDIR=/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug
>> generating /build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/makefile.in 
>> from /amd/devco/sebor/stdcxx/etc/config/vacpp.config
>> expr: 0402-050 Syntax error.
>> gmake[1]: Entering directory 
>> `/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug'
>> gmake[2]: Entering directory 
>> `/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/include'
>> gmake config
>> gmake[3]: Entering directory 
>> `/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/include'
>>
>> configuring for xlCcore- on aix-5.3
>>
>> checking if the compiler is sane                   ok (invoked with 
>> xlCcore)
>> checking if the linker is sane                     ok (invoked with 
>> xlCcore)
>> ...
>> gmake[2]: Entering directory 
>> `/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/examples'
>> xlCcore -c -I/amd/devco/sebor/stdcxx/include/ansi -D_RWSTDDEBUG 
>> -D_RWSTD_USE_CONFIG -I/amd/devco/sebor/stdcxx/include 
>> -I/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/include 
>> -I/amd/devco/sebor/stdcxx/examples/include  -g 
>> -qtemplateregistry=accumulate.ti 
>> /amd/devco/sebor/stdcxx/examples/manual/accumulate.cpp
>> xlCcore accumulate.o -o accumulate 
>> -I/amd/devco/sebor/stdcxx/include/ansi -D_RWSTDDEBUG 
>> -D_RWSTD_USE_CONFIG -liconv -brtl 
>> -L/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/lib -lstd 
>> -Wl,-bsvr4,-R/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/lib  -lm 
>> -qtemplateregistry=accumulate.ti
>> ld: 0706-005 Cannot find or open file: debug/lib
>>         ld:open(): A file or directory in the path name does not exist.
>> gmake[2]: *** [accumulate] Error 255
>> gmake[2]: Leaving directory 
>> `/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/examples'
>> gmake[1]: [examples] Error 2 (ignored)
>>
> 


Re: xlC link errors caused by commas in BUILDDIR

Posted by Andrew Black <ab...@roguewave.com>.
Greetings Martin.

For what it's worth, this isn't a problem restricted to XLC++.  My
reading of the .config files indicates that the only compilers that
won't be affected are the osf_cxx, Sunpro, reliant_cds, como and eccp
compilers.  The first two compilers don't use a comma in the rpath
option, and the remainder don't have an rpath switch defined.

It might be possible to alter the makefiles to mangle the path, escaping
the comma, but I suspect that could cause other problems.  I would
hazard a guess that spaces in the value of $BUILDDIR might also cause a
number of problems.

--Andrew Black

Martin Sebor wrote:
> I've run into a linker error when building with IBM XLC++
> in a directory whose name contains a comma (see below).
> The problem is that we're passing the absolute pathname
> of $BUILDDIR/lib to the linker via the -Wl compiler driver
> option. This option uses the comma to separate individual
> arguments from one another. I don't know if it's worth
> trying to deal with this or not but I thought I'd mention
> it in case someone else runs into the same problem or in
> case Andrew has an idea for how to fix it.
> 
> Martin
> 
> $ nice gmake BUILDMODE=shared,debug 
> BUILDDIR=/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug
> GNUmakefile:289: "CONFIG not specified, using vacpp.config"
> expr: 0402-050 Syntax error.
> creating BUILDDIR=/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug
> generating /build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/makefile.in 
> from /amd/devco/sebor/stdcxx/etc/config/vacpp.config
> expr: 0402-050 Syntax error.
> gmake[1]: Entering directory 
> `/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug'
> gmake[2]: Entering directory 
> `/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/include'
> gmake config
> gmake[3]: Entering directory 
> `/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/include'
> 
> configuring for xlCcore- on aix-5.3
> 
> checking if the compiler is sane                   ok (invoked with 
> xlCcore)
> checking if the linker is sane                     ok (invoked with 
> xlCcore)
> ...
> gmake[2]: Entering directory 
> `/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/examples'
> xlCcore -c -I/amd/devco/sebor/stdcxx/include/ansi -D_RWSTDDEBUG 
> -D_RWSTD_USE_CONFIG -I/amd/devco/sebor/stdcxx/include 
> -I/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/include 
> -I/amd/devco/sebor/stdcxx/examples/include  -g 
> -qtemplateregistry=accumulate.ti 
> /amd/devco/sebor/stdcxx/examples/manual/accumulate.cpp
> xlCcore accumulate.o -o accumulate 
> -I/amd/devco/sebor/stdcxx/include/ansi -D_RWSTDDEBUG -D_RWSTD_USE_CONFIG 
> -liconv -brtl -L/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/lib -lstd 
> -Wl,-bsvr4,-R/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/lib  -lm 
> -qtemplateregistry=accumulate.ti
> ld: 0706-005 Cannot find or open file: debug/lib
>         ld:open(): A file or directory in the path name does not exist.
> gmake[2]: *** [accumulate] Error 255
> gmake[2]: Leaving directory 
> `/build/sebor/tmp/stdcxx-vacpp-7.0-shared,debug/examples'
> gmake[1]: [examples] Error 2 (ignored)
>