Thread overview
Problem using STL in Makefile
Sep 03, 2002
Tat Chan
Sep 03, 2002
Walter
Sep 04, 2002
Tat Chan
Sep 04, 2002
Walter
Sep 04, 2002
Tat Chan
Sep 04, 2002
Tat Chan
Sep 04, 2002
Walter
September 03, 2002
Hi,
I managed to compile a project using DMC v8.29n that was originally compiled
using Symantec C++ v7.2 I am now trying to add some STL code to the original
C-only code.

My setup is:
Windows 2000 SP2
Location of DM:  c:\dev\dm

In one of the files, I just added a "#include <vector>" to see if the new code will compile. I am using the SGI STL library that came with the DMC download.

I get the following errors:

SMAKE  Program Maintenance Utility (Console) Version 7.50
Copyright (c) 1994-1995 Innovative Data Concepts Incorporated
Copyright (c) 1994-2001 Digital Mars
All Rights Reserved

c:\dev\dm\bin\sc -r -Ju -mn -3 -a8 -C -S -g -gd  -D_CONSOLE -D_MT -D_WIN
DOWS -DHAVE_USLEEP -DSQUID_CFG_DIR=\"./config\" -DSQUID_WGT_DIR=\"./wgtfiles\"
-DSQUID_LOG_DIR=\"./logs\" -DSAVESAMP_DIR=\"./savesamp\" -DUSE_GUI    -DHAVE_CAP
I=1 -If:\capi20\include   -c -opsquid\main.obj main.c
c:\dev\dm\bin\sc -r -Ju -mn -3 -a8 -C -S -g -gd  -D_CONSOLE -D_MT -D_WIN
DOWS -DHAVE_USLEEP -DSQUID_CFG_DIR=\"./config\" -DSQUID_WGT_DIR=\"./wgtfiles\"
-DSQUID_LOG_DIR=\"./logs\" -DSAVESAMP_DIR=\"./savesamp\" -DUSE_GUI    -DHAVE_CAP
I=1 -If:\capi20\include   -c -opsquid\init.obj init.c
c:\dev\dm\bin\sc -r -Ju -mn -3 -a8 -C -S -g -gd  -D_CONSOLE -D_MT -D_WIN
DOWS -DHAVE_USLEEP -DSQUID_CFG_DIR=\"./config\" -DSQUID_WGT_DIR=\"./wgtfiles\"
-DSQUID_LOG_DIR=\"./logs\" -DSAVESAMP_DIR=\"./savesamp\" -DUSE_GUI    -DHAVE_CAP
I=1 -If:\capi20\include   -c -opsquid\console.obj console.c
inline void __stl_throw_range_error(const char*) {}
^
C:\DEV\DM\BIN\..\stl\stl_range_errors.h(61) : Error: '=', ';' or ',' expected
}
^
C:\DEV\DM\BIN\..\stl\stl_relops.h(39) : Error: identifier or '( declarator )' ex
pected
template <class _Tp>
^
C:\DEV\DM\BIN\..\stl\stl_relops.h(41) : Error: '=', ';' or ',' expected
}
^
C:\DEV\DM\BIN\..\stl\stl_relops.h(44) : Error: identifier or '( declarator )' ex
pected
template <class _Tp>
^
C:\DEV\DM\BIN\..\stl\stl_relops.h(46) : Error: '=', ';' or ',' expected
Fatal error: too many errors
--- errorlevel 1
SMAKE fatal error: command "c:\dev\dm\bin\sc" returned with error code 1
Stopping.
SMAKE fatal error: command "smake" returned with error code 2
Stopping.

The -D macro definitions and compiler command line options were from the original Makefile using Symantec C++ v7.2 (which DMC compiled successfully, without the "#include <vector>" line). The file console.c contains the "#include <vector> line".

I find this weird as I have written a test case using strings and vectors which compiles(and runs) fine using "sc -osym.exe sym.cpp".

Do I need to make any #defines or set up the STL library before using it?

Thanks,

Tat


September 03, 2002
Your makefile is compiling a C++ program as if it were a C program. Try using -cpp, and remove the -Ju.

"Tat Chan" <Tat_member@pathlink.com> wrote in message news:al1iaj$2hc6$1@digitaldaemon.com...
> Hi,
> I managed to compile a project using DMC v8.29n that was originally
compiled
> using Symantec C++ v7.2 I am now trying to add some STL code to the
original
> C-only code.
>
> My setup is:
> Windows 2000 SP2
> Location of DM:  c:\dev\dm
>
> In one of the files, I just added a "#include <vector>" to see if the new
code
> will compile. I am using the SGI STL library that came with the DMC
download.
>
> I get the following errors:
>
> SMAKE  Program Maintenance Utility (Console) Version 7.50
> Copyright (c) 1994-1995 Innovative Data Concepts Incorporated
> Copyright (c) 1994-2001 Digital Mars
> All Rights Reserved
>
> c:\dev\dm\bin\sc -r -Ju -mn -3 -a8 -C -S -g -gd  -D_CONSOLE -D_MT -D_WIN
>
DOWS -DHAVE_USLEEP -DSQUID_CFG_DIR=\"./config\" -DSQUID_WGT_DIR=\"./wgtfiles \"
> -DSQUID_LOG_DIR=\"./logs\" -DSAVESAMP_DIR=\"./savesamp\" -DUSE_GUI    -DHA
VE_CAP
> I=1 -If:\capi20\include   -c -opsquid\main.obj main.c
> c:\dev\dm\bin\sc -r -Ju -mn -3 -a8 -C -S -g -gd  -D_CONSOLE -D_MT -D_WIN
>
DOWS -DHAVE_USLEEP -DSQUID_CFG_DIR=\"./config\" -DSQUID_WGT_DIR=\"./wgtfiles \"
> -DSQUID_LOG_DIR=\"./logs\" -DSAVESAMP_DIR=\"./savesamp\" -DUSE_GUI    -DHA
VE_CAP
> I=1 -If:\capi20\include   -c -opsquid\init.obj init.c
> c:\dev\dm\bin\sc -r -Ju -mn -3 -a8 -C -S -g -gd  -D_CONSOLE -D_MT -D_WIN
>
DOWS -DHAVE_USLEEP -DSQUID_CFG_DIR=\"./config\" -DSQUID_WGT_DIR=\"./wgtfiles \"
> -DSQUID_LOG_DIR=\"./logs\" -DSAVESAMP_DIR=\"./savesamp\" -DUSE_GUI    -DHA
VE_CAP
> I=1 -If:\capi20\include   -c -opsquid\console.obj console.c
> inline void __stl_throw_range_error(const char*) {}
> ^
> C:\DEV\DM\BIN\..\stl\stl_range_errors.h(61) : Error: '=', ';' or ','
expected
> }
> ^
> C:\DEV\DM\BIN\..\stl\stl_relops.h(39) : Error: identifier or '(
declarator )' ex
> pected
> template <class _Tp>
> ^
> C:\DEV\DM\BIN\..\stl\stl_relops.h(41) : Error: '=', ';' or ',' expected
> }
> ^
> C:\DEV\DM\BIN\..\stl\stl_relops.h(44) : Error: identifier or '(
declarator )' ex
> pected
> template <class _Tp>
> ^
> C:\DEV\DM\BIN\..\stl\stl_relops.h(46) : Error: '=', ';' or ',' expected
> Fatal error: too many errors
> --- errorlevel 1
> SMAKE fatal error: command "c:\dev\dm\bin\sc" returned with error code 1
> Stopping.
> SMAKE fatal error: command "smake" returned with error code 2
> Stopping.
>
> The -D macro definitions and compiler command line options were from the original Makefile using Symantec C++ v7.2 (which DMC compiled
successfully,
> without the "#include <vector>" line). The file console.c contains the
"#include
> <vector> line".
>
> I find this weird as I have written a test case using strings and vectors
which
> compiles(and runs) fine using "sc -osym.exe sym.cpp".
>
> Do I need to make any #defines or set up the STL library before using it?
>
> Thanks,
>
> Tat
>
>


September 04, 2002
Hi Walter,

I added the -cpp flag and removed the -Ju flag from the compiler and got the following result:


SMAKE  Program Maintenance Utility (Console) Version 7.21
Copyright (c) 1994-1995 Innovative Data Concepts Incorporated
Copyright (c) 1994-1995 Symantec Corporation
All Rights Reserved

*** Building PSTN specific SQUID modules ***
smake CFG= CFGDEFS=" " -fpstnslib.mak

SMAKE  Program Maintenance Utility (Console) Version 7.21
Copyright (c) 1994-1995 Innovative Data Concepts Incorporated
Copyright (c) 1994-1995 Symantec Corporation
All Rights Reserved

c:\dev\dm\bin\sc -r -mn -3 -a8 -cpp -S -g  -D_CONSOLE -D_MT -D_WINDOWS -
DHAVE_USLEEP -DSQUID_CFG_DIR=\"./config\" -DSQUID_WGT_DIR=\"./wgtfiles\"  -DSQUI
D_LOG_DIR=\"./logs\" -DSAVESAMP_DIR=\"./savesamp\" -DUSE_GUI -If:\capi20\include
-c -ocapi.obj capi.c
Info = CAPI_GET_CMSG(CMSG, ccid->Appl_Id);
^
capi.c(192) : Error: need explicit cast to convert
from: unsigned
to  : enum MESSAGE_EXCHANGE_ERROR
--- errorlevel 1
SMAKE fatal error: command "c:\dev\dm\bin\sc" returned with error code 1
Stopping.
SMAKE fatal error: command "smake" returned with error code 2
Stopping.

The cast error now appears in a file that has not been modified and was successfully compiled previously without the -cpp flag. MESSAGE_EXCHANGE_ERROR is defined in another library's header file.

Is there a compiler switch to avoid making an explicit cast (I couldn't find one in the documentation)?

Or should I change the Makefile to only use the -cpp flag on files that have C++ code as the original app was written in pure C?


thanks,

Tat

In article <al2n9l$2g6v$1@digitaldaemon.com>, Walter says...
>
>Your makefile is compiling a C++ program as if it were a C program. Try using -cpp, and remove the -Ju.
>



September 04, 2002
You've run into a difference between C++ and C semantics. Just put the cast in, and it will compile with both C and C++. -Walter

"Tat Chan" <Tat_member@pathlink.com> wrote in message news:al3j6a$2ftr$1@digitaldaemon.com...
> Hi Walter,
>
> I added the -cpp flag and removed the -Ju flag from the compiler and got
the
> following result:
>
>
> SMAKE  Program Maintenance Utility (Console) Version 7.21
> Copyright (c) 1994-1995 Innovative Data Concepts Incorporated
> Copyright (c) 1994-1995 Symantec Corporation
> All Rights Reserved
>
> *** Building PSTN specific SQUID modules ***
> smake CFG= CFGDEFS=" " -fpstnslib.mak
>
> SMAKE  Program Maintenance Utility (Console) Version 7.21
> Copyright (c) 1994-1995 Innovative Data Concepts Incorporated
> Copyright (c) 1994-1995 Symantec Corporation
> All Rights Reserved
>
> c:\dev\dm\bin\sc -r -mn -3 -a8 -cpp -S -g  -D_CONSOLE -D_MT -D_WINDOWS -
>
HAVE_USLEEP -DSQUID_CFG_DIR=\"./config\" -DSQUID_WGT_DIR=\"./wgtfiles\"  -DS QUI
>
D_LOG_DIR=\"./logs\" -DSAVESAMP_DIR=\"./savesamp\" -DUSE_GUI -If:\capi20\inc lude
> -c -ocapi.obj capi.c
> Info = CAPI_GET_CMSG(CMSG, ccid->Appl_Id);
> ^
> capi.c(192) : Error: need explicit cast to convert
> from: unsigned
> to  : enum MESSAGE_EXCHANGE_ERROR
> --- errorlevel 1
> SMAKE fatal error: command "c:\dev\dm\bin\sc" returned with error code 1
> Stopping.
> SMAKE fatal error: command "smake" returned with error code 2
> Stopping.
>
> The cast error now appears in a file that has not been modified and was successfully compiled previously without the -cpp flag.
MESSAGE_EXCHANGE_ERROR
> is defined in another library's header file.
>
> Is there a compiler switch to avoid making an explicit cast (I couldn't
find one
> in the documentation)?
>
> Or should I change the Makefile to only use the -cpp flag on files that
have C++
> code as the original app was written in pure C?
>
>
> thanks,
>
> Tat
>
> In article <al2n9l$2g6v$1@digitaldaemon.com>, Walter says...
> >
> >Your makefile is compiling a C++ program as if it were a C program. Try using -cpp, and remove the -Ju.
> >
>
>
>


September 04, 2002
Hi Walter,

I am now getting a different kind of error ... I assume it is to do with the different meanings of "static" in C and C++


SMAKE  Program Maintenance Utility (Console) Version 7.21
Copyright (c) 1994-1995 Innovative Data Concepts Incorporated
Copyright (c) 1994-1995 Symantec Corporation
All Rights Reserved

c:\dev\dm\bin\sc -cpp -r -mn -3 -a8 -S -g  -D_CONSOLE -D_MT -D_WINDOWS
DHAVE_USLEEP -DSQUID_CFG_DIR=\"./config\" -DSQUID_WGT_DIR=\"./wgtfiles\"  -DSQ
D_LOG_DIR=\"./logs\" -DSAVESAMP_DIR=\"./savesamp\" -DUSE_GUI    -DHAVE_CAPI=1
f:\capi20\include   -c -opsquid\console.obj console.c
static logid_t *                        clog = &console_logid;
^
console.c(74) : Error: 'clog' previously declared as something else
It was declared as: ostream_withassign
It is now declared: logid_t*
}
^
console.c(1130) : Warning 18: implied return of set_dc_input_sym at closing '}
does not return value
}
^
console.c(1152) : Warning 18: implied return of set_rate_input_sym at closing
' does not return value
--- errorlevel 1
SMAKE fatal error: command "c:\dev\dm\bin\sc" returned with error code 1
Stopping.
SMAKE fatal error: command "smake" returned with error code 2
Stopping.


I had a look at the code, and this is the first time the static variable clog is defined. It is pointing to another static variable, console_logid, which is of type "static logid_t".


Also, the 2 error warnings are because the function prototypes are meant to return static ints, but there is no explicit call to return any values.

In article <al3jps$2i6h$1@digitaldaemon.com>, Walter says...
>
>You've run into a difference between C++ and C semantics. Just put the cast in, and it will compile with both C and C++. -Walter
>


September 04, 2002
whoops ... clog is defined in include/IOSTREAM.H as "extern ostream_withassign clog", so I have to change the declaration of clog in my code


September 04, 2002
I suggest it may be easier to port the code to C++ first, and afterwards try to mix in STL.

"Tat Chan" <Tat_member@pathlink.com> wrote in message news:al3om2$31fl$1@digitaldaemon.com...
> whoops ... clog is defined in include/IOSTREAM.H as "extern
ostream_withassign
> clog", so I have to change the declaration of clog in my code