🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
5 messages
5 total messages Started by Ivan Van den Bossche Thu, 17 Jul 2003 19:04
Compilermeldingen in Visual C++ .NET
#4628
Author: Ivan Van den Bossche
Date: Thu, 17 Jul 2003 19:04
26 lines
2456 bytes
Hi,

Ik krijg de volgende meldingen in Visual C++ .NET tijdens het compileren van
een project:

d:\backup\IVB\PrintOnDemand SERVICE\PODService\main.cpp(167): warning C4267:
'argument' : conversion from 'size_t' to 'int', possible loss of data
d:\backup\IVB\PrintOnDemand SERVICE\PODService\main.cpp(178): warning C4267:
'argument' : conversion from 'size_t' to 'int', possible loss of data
PODService error LNK2005: _malloc already defined in LIBC.lib(malloc.obj)
PODService error LNK2005: _free already defined in LIBC.lib(free.obj)
PODService error LNK2005: "private: __thiscall type_info::type_info(class
type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in
LIBC.lib(typinfo.obj)
PODService error LNK2005: "private: class type_info & __thiscall
type_info::operator=(class type_info const &)"
(??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBC.lib(typinfo.obj)
PODService warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other
libs; use /NODEFAULTLIB:library
PODService fatal error LNK1169: one or more multiply defined symbols found


Weet er iemand hoe ik deze meldingen weg kan krijgen?

Alvast bedankt
Ivan Van den Bossche
Re: Compilermeldingen in Visual C++ .NET
#4630
Author: Pieter Philippaerts
Date: Thu, 17 Jul 2003 20:21
29 lines
2783 bytes
"Ivan Van den Bossche" <ivan.van.den.bossche@pandora.be> wrote in message
> d:\backup\IVB\PrintOnDemand SERVICE\PODService\main.cpp(167): warning
C4267:
> 'argument' : conversion from 'size_t' to 'int', possible loss of data

size_t is een uint, dus bij het converteren van uint naar int kan je data
verliezen.

> PODService error LNK2005: _malloc already defined in LIBC.lib(malloc.obj)
> PODService error LNK2005: _free already defined in LIBC.lib(free.obj)
> PODService error LNK2005: "private: __thiscall type_info::type_info(class
> type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in
> LIBC.lib(typinfo.obj)
> PODService error LNK2005: "private: class type_info & __thiscall
> type_info::operator=(class type_info const &)"
> (??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBC.lib(typinfo.obj)
> PODService warning LNK4098: defaultlib 'MSVCRT' conflicts with use of
other
> libs; use /NODEFAULTLIB:library
> PODService fatal error LNK1169: one or more multiply defined symbols found

Uit de bovenstaande fouten leid ik af dat je je project met twee
verschillende C runtimes wil linken [namelijk libc.lib en msvcrt.lib]. De
link met msvcrt wordt automatisch gedaan.
Oplossing hiervoor is [1] ofwel niet linken met libc.lib [2] ofwel compilen
met de NODEFAULTLIB optie, zoals de error message aangeeft.

Mvg,
Pieter Philippaerts
Re: Compilermeldingen in Visual C++ .NET
#4631
Author: Sjoerd Schreuder
Date: Thu, 17 Jul 2003 20:27
62 lines
4124 bytes

Ivan Van den Bossche wrote:
> Ik krijg de volgende meldingen in Visual C++ .NET tijdens het compileren van
> een project:
> 
> d:\backup\IVB\PrintOnDemand SERVICE\PODService\main.cpp(167): warning C4267:
> 'argument' : conversion from 'size_t' to 'int', possible loss of data
> d:\backup\IVB\PrintOnDemand SERVICE\PODService\main.cpp(178): warning C4267:
> 'argument' : conversion from 'size_t' to 'int', possible loss of data

Dit zijn warnings van de compiler. Je gebruikt ergens een int om een waarde
op te slaan die officieel van het type 'size_t' is en die kan grotere
getallen bevatten dan een int aankan. Waarschijnlijk komt die size_t van
een sizeof() of zoiets.

Maar goed, wat je doet is officieel wel toegestaan door de C++ standaard,
ook al kan het in de praktijk "verkeerde" resultaten opleveren.

C++ wordt vanwege dit soort zaken wel eens als onveilig gezien. Gelukkig
zijn er warnings. Warnings zijn meestal wel een indicatie om ergens nog
eens naar te kijken, want niet alles wat mag is ook altijd verstandig
om te doen.

> PODService error LNK2005: _malloc already defined in LIBC.lib(malloc.obj)
> PODService error LNK2005: _free already defined in LIBC.lib(free.obj)
> PODService error LNK2005: "private: __thiscall type_info::type_info(class
> type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in
> LIBC.lib(typinfo.obj)
> PODService error LNK2005: "private: class type_info & __thiscall
> type_info::operator=(class type_info const &)"
> (??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBC.lib(typinfo.obj)

> PODService warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other
> libs; use /NODEFAULTLIB:library

> PODService fatal error LNK1169: one or more multiply defined symbols found

Het klinkt alsof je de standaard library twee keer mee probeert te linken.
Normaal wordt de standaard library al wel meegelinkt, maar blijkbaar doe
je dat nog een tweede keer en dan gaat de compiler klagen dat hij
die functie al kent. Het gaat om de functies malloc() en free() en
de klasse type_info.

Ik heb zulke problemen ook bij MSVC 6.0 meegemaakt, en toen kwam dit
doordat er een debug library werd meegelinkt in een release build,
of omgekeerd.

Ergens staat er in de projectsettings iets waardoor dit komt. Welke
settings zou ik niet zo kunnen zeggen. Die /NODEFAULTLIB optie zou
ik niet gebruiken: dat is alleen noodzakelijk als je de normale
library niet wilt gebruiken. Er zijn uitzonderlijke situaties
waarin je dat zou willen (je kunt die 300 bytes extra niet missen
of iets dergelijks), maar gezien je vraag zul je je daar echt
niet bezig (mogen) houden.

Probeer eens een vers project aan te maken en dan alle source files
daaraan toe te voegen; En kijk vervolgens met een filediff naar
de twee project files. Misschien kun je zo opsporen welke setting
verkeerd staat.

Sjoerd Schreuder
Re: Compilermeldingen in Visual C++ .NET
#4634
Author: Ivan Van den Bossche
Date: Fri, 18 Jul 2003 07:19
79 lines
4521 bytes
Hey,

Weet er iemand waar ik deze instellingen kan wijzigen in Visual C++ .NET?

Bedankt
Ivan

"Sjoerd Schreuder" <sa_schreuder@wanadoo.nl> wrote in message
news:3F17074C.F3725A6A@wanadoo.nl...
>
>
> Ivan Van den Bossche wrote:
> > Ik krijg de volgende meldingen in Visual C++ .NET tijdens het compileren
van
> > een project:
> >
> > d:\backup\IVB\PrintOnDemand SERVICE\PODService\main.cpp(167): warning
C4267:
> > 'argument' : conversion from 'size_t' to 'int', possible loss of data
> > d:\backup\IVB\PrintOnDemand SERVICE\PODService\main.cpp(178): warning
C4267:
> > 'argument' : conversion from 'size_t' to 'int', possible loss of data
>
> Dit zijn warnings van de compiler. Je gebruikt ergens een int om een
waarde
> op te slaan die officieel van het type 'size_t' is en die kan grotere
> getallen bevatten dan een int aankan. Waarschijnlijk komt die size_t van
> een sizeof() of zoiets.
>
> Maar goed, wat je doet is officieel wel toegestaan door de C++ standaard,
> ook al kan het in de praktijk "verkeerde" resultaten opleveren.
>
> C++ wordt vanwege dit soort zaken wel eens als onveilig gezien. Gelukkig
> zijn er warnings. Warnings zijn meestal wel een indicatie om ergens nog
> eens naar te kijken, want niet alles wat mag is ook altijd verstandig
> om te doen.
>
> > PODService error LNK2005: _malloc already defined in
LIBC.lib(malloc.obj)
> > PODService error LNK2005: _free already defined in LIBC.lib(free.obj)
> > PODService error LNK2005: "private: __thiscall
type_info::type_info(class
> > type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in
> > LIBC.lib(typinfo.obj)
> > PODService error LNK2005: "private: class type_info & __thiscall
> > type_info::operator=(class type_info const &)"
> > (??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBC.lib(typinfo.obj)
>
> > PODService warning LNK4098: defaultlib 'MSVCRT' conflicts with use of
other
> > libs; use /NODEFAULTLIB:library
>
> > PODService fatal error LNK1169: one or more multiply defined symbols
found
>
> Het klinkt alsof je de standaard library twee keer mee probeert te linken.
> Normaal wordt de standaard library al wel meegelinkt, maar blijkbaar doe
> je dat nog een tweede keer en dan gaat de compiler klagen dat hij
> die functie al kent. Het gaat om de functies malloc() en free() en
> de klasse type_info.
>
> Ik heb zulke problemen ook bij MSVC 6.0 meegemaakt, en toen kwam dit
> doordat er een debug library werd meegelinkt in een release build,
> of omgekeerd.
>
> Ergens staat er in de projectsettings iets waardoor dit komt. Welke
> settings zou ik niet zo kunnen zeggen. Die /NODEFAULTLIB optie zou
> ik niet gebruiken: dat is alleen noodzakelijk als je de normale
> library niet wilt gebruiken. Er zijn uitzonderlijke situaties
> waarin je dat zou willen (je kunt die 300 bytes extra niet missen
> of iets dergelijks), maar gezien je vraag zul je je daar echt
> niet bezig (mogen) houden.
>
> Probeer eens een vers project aan te maken en dan alle source files
> daaraan toe te voegen; En kijk vervolgens met een filediff naar
> de twee project files. Misschien kun je zo opsporen welke setting
> verkeerd staat.
>
> Sjoerd Schreuder
Re: Compilermeldingen in Visual C++ .NET
#4639
Author: Pieter Philippaerts
Date: Fri, 18 Jul 2003 12:48
5 lines
1649 bytes
"Ivan Van den Bossche" <i.vandenbossche@vinke.com> wrote in message
news:YbNRa.17845$F92.2068@afrodite.telenet-ops.be...
> Weet er iemand waar ik deze instellingen kan wijzigen in Visual C++ .NET?

Rechter-knop op project -> Properties -> Linker -> Command Line
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads