/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
probl. med at linke c++
Fra : Bjarne


Dato : 12-07-01 20:36

Når jeg oversætter nedenstående program med :
gcc -o snot snot.c

glider det glat igennem, men hvis jeg oversætter med :

gcc -x c++ -o snot snot.c

får jeg følgende fejl :

/tmp/ccOUT3WE.o: In function `main':
/tmp/ccOUT3WE.o(.text+0xe): undefined reference to `ftime(timeb *)'

Det er en essensen af et større projekt, så glem bare at det i
sig selv er meningsløst.
Problemet optræder både med gcc 2.95.2 2.95.3 og 3.0 samt på
FreeBSD og TRU64, så det er sikkert bare et eller andet simpelt
jeg lige har overset i forbindelse med c++

#---------------------------------------------
#include <stdio.h>
#include <sys/types.h>
#include <sys/timeb.h>
#include <unistd.h>

extern int ftime(struct timeb *tp);
extern unsigned int sleep(unsigned int seconds);

main () {
struct timeb tid;

ftime (&tid);
sleep (2);
printf ("tid = %d Timezone = %d\n",
tid.time, tid.timezone);

}
#---------------------------------------------

mvh,
Bjarne

 
 
Anders Melchiorsen (12-07-2001)
Kommentar
Fra : Anders Melchiorsen


Dato : 12-07-01 22:40

bjb@c.dk (Bjarne) skrev:

> [...] jeg lige har overset i forbindelse med c++

> extern int ftime(struct timeb *tp);
> extern unsigned int sleep(unsigned int seconds);

Dette siger at der findes C++ funktioner med disse typer et eller
andet sted. Men det gør der ikke, der findes C funktioner. Derfor skal
du i stedet bruge 'extern "C"'.

Men i denne sammenhæng skal du blot bruge de rette .h filer i stedet
for at prøve at klare ærterne selv - så opstår problemet slet ikke.

Du kan dog få brug for 'extern "C"' hvis du roder med andet end
standardbiblioteker, især når du roder med egne gamle C stumper.

--
Regards, Anders

....if a Microsoft product fails, who do you sue?

Igor V. Rafienko (13-07-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 13-07-01 13:15

[ bjb@c.dk ]

> Når jeg oversætter nedenstående program med :
> gcc -o snot snot.c
>
> glider det glat igennem, men hvis jeg oversætter med :
>
> gcc -x c++ -o snot snot.c
>
> får jeg følgende fejl :
>
> /tmp/ccOUT3WE.o: In function `main':
> /tmp/ccOUT3WE.o(.text+0xe): undefined reference to `ftime(timeb *)'


Ypperlig eksempel på hvorfor man _ikke_ skal rote med "forward
declarations" av funksjoner som tilhører implementasjonen.


> #include <stdio.h>
> #include <sys/types.h>
> #include <sys/timeb.h>
> #include <unistd.h>
>
> extern int ftime(struct timeb *tp);
> extern unsigned int sleep(unsigned int seconds);


Jeg tror[tm] at det å bli kvitt disse to vil hjelpe på saken
betraktelig. Du skal ikke trenge disse, når <sys/timeb.h> og
<unistd.h> er #include'rt.


> main () {


int main() {

[snip]





ivr
--
Amy: Psst... look what life was like before genetic engeneering.
Leela: Those poor 20th century women...
-- Futurama, "Why must I be a Crustacean in love?"

Bjarne (13-07-2001)
Kommentar
Fra : Bjarne


Dato : 13-07-01 19:34

In article <m27kxdq12j.fsf@dolle.kalibalik.dk>,
   Anders Melchiorsen <anders@kalibalik.dk> writes:
> bjb@c.dk (Bjarne) skrev:
>
>> [...] jeg lige har overset i forbindelse med c++
>
>> extern int ftime(struct timeb *tp);
>> extern unsigned int sleep(unsigned int seconds);
>
> Dette siger at der findes C++ funktioner med disse typer et eller
> andet sted. Men det gør der ikke, der findes C funktioner. Derfor skal
> du i stedet bruge 'extern "C"'.
>
Bingo ! Den sad. Nu lykkedes det.

> Men i denne sammenhæng skal du blot bruge de rette .h filer i stedet
> for at prøve at klare ærterne selv - så opstår problemet slet ikke.

Hm.. det troede jeg faktisk også jeg gjorde.

>
> Du kan dog få brug for 'extern "C"' hvis du roder med andet end
> standardbiblioteker, især når du roder med egne gamle C stumper.
>

Det eneste der nu er tilbage er :
/usr/bin/ld:
Unresolved:
__gxx_personality_v0
collect2: ld returned 1 exit status

når jeg bruger gcc 3.0 på TRU64

Tak for hjælpen så langt.
mvh,
Bjarne

Bjarne (13-07-2001)
Kommentar
Fra : Bjarne


Dato : 13-07-01 19:37

In article <xjvae29xbxn.fsf@nicotera.ifi.uio.no>,
   igorr@ifi.uio.no (Igor V. Rafienko) writes:
> [ bjb@c.dk ]
>
>> Når jeg oversætter nedenstående program med :
>> gcc -o snot snot.c
>>
>> glider det glat igennem, men hvis jeg oversætter med :
>>
>> gcc -x c++ -o snot snot.c
>>
>> får jeg følgende fejl :
>>
>> /tmp/ccOUT3WE.o: In function `main':
>> /tmp/ccOUT3WE.o(.text+0xe): undefined reference to `ftime(timeb *)'
>
>
> Ypperlig eksempel på hvorfor man _ikke_ skal rote med "forward
> declarations" av funksjoner som tilhører implementasjonen.
Hvis jeg ikke definerer dem først får jeg :

snot.cpp: In function `int main()':
snot.cpp:13: `ftime' undeclared (first use this function)

:snip
>
>> main () {
>
>
> int main() {
Ok, er med nu.
>
> [snip]
> ivr

Tak for svaret
mvh,
Bjarne


Igor V. Rafienko (13-07-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 13-07-01 20:31

[ bjb@c.dk ]

[ snip ]

> Hvis jeg ikke definerer dem først får jeg :
>
> snot.cpp: In function `int main()':
> snot.cpp:13: `ftime' undeclared (first use this function)


Og du kompilerer uten -ansi/-pedantic?





ivr
--
"Ma belle demoiselle, repondit Candide, quand on est amoureux, jaloux
et fouette par l'Inquisition, on ne se connait plus"
            Voltaire, "Candide"

Bjarne (13-07-2001)
Kommentar
Fra : Bjarne


Dato : 13-07-01 20:47

In article <xjv1ynkk4n7.fsf@vellheitur.ifi.uio.no>,
   igorr@ifi.uio.no (Igor V. Rafienko) writes:
> [ bjb@c.dk ]
>
> [ snip ]
>
>> Hvis jeg ikke definerer dem først får jeg :
>>
>> snot.cpp: In function `int main()':
>> snot.cpp:13: `ftime' undeclared (first use this function)
>
>
> Og du kompilerer uten -ansi/-pedantic?
Yep : gcc -x c++ -o snot snot.c
>
> ivr

mvh,
Bjarne

Igor V. Rafienko (13-07-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 13-07-01 21:34

[ bjb@c.dk ]

[snip]

> > Og du kompilerer uten -ansi/-pedantic?
>
> Yep : gcc -x c++ -o snot snot.c


Merkelig. Står det en eller annen festlig #ifdef rundt ftime
deklarasjonen i sys/timeb.h? (btw, jeg ville anbefale å bruke g++
direkte på C++ kode).





ivr
--
"Ma belle demoiselle, repondit Candide, quand on est amoureux, jaloux
et fouette par l'Inquisition, on ne se connait plus"
            Voltaire, "Candide"

Bjarne (14-07-2001)
Kommentar
Fra : Bjarne


Dato : 14-07-01 08:17

In article <xjvk81c7emp.fsf@nicotera.ifi.uio.no>,
   igorr@ifi.uio.no (Igor V. Rafienko) writes:
> [ bjb@c.dk ]
>
> [snip]
>
>> > Og du kompilerer uten -ansi/-pedantic?
>>
>> Yep : gcc -x c++ -o snot snot.c
>
>
> Merkelig. Står det en eller annen festlig #ifdef rundt ftime
> deklarasjonen i sys/timeb.h? (btw, jeg ville anbefale å bruke g++
> direkte på C++ kode).

Næ, det ser meget enkelt ud :

#ifndef _SYS_TIMEB_H_
#define _SYS_TIMEB_H_

/* The ftime(2) system call structure -- deprecated. */
struct timeb {
time_t time; /* seconds since the Epoch */
unsigned short millitm; /* + milliseconds since the Epoch */
short timezone; /* minutes west of CUT */
short dstflag; /* DST == non-zero */
};

#endif

Om jeg bruger g++ eller gcc -x c++ går ud på det samme.

mvh,
Bjarne

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste