webForumDet fria alternativet

Ett annat fel...

C/C++

13 svar · 585 visningar · startad av Alpha II

Medlem sedan maj 20002 993 inlägg
Frågan#1

När jag försöker kompilera ett exempel från en DirectDraw tutorial får jag felet:

Error: Unresolved external 'DirectDrawCreateEx' referenced from SÖKVÄG\DD.OBJ

Medlem sedan aug. 2001723 inlägg
#2

Du måste länka med någon libfil där directdrawcreateex finns med. Vad har du för kompilator? Flaggan -l brukar användas för länkning.

Tex g++ -ldirectdraw.lib fil.cpp eller nåt i den stilen.

Medlem sedan maj 20002 993 inlägg
#3

Jag använder BCC5.5 och jag försöker kompilera exemplet med hjälp av en "Makefile-fil" som följde med kod exemplet.

Medlem sedan maj 20002 993 inlägg
#4

ingen som vet? :(

Medlem sedan aug. 2001723 inlägg
#5

I makefilen står det någonstans hur .exe-filen ska byggas, något i stil med

program: fil1.o fil2.o...
kompilatornamn fil1.o fil2.o... -o program

Lägg till -lddraw.lib på den raden.

Medlem sedan maj 20002 993 inlägg
#6

Fatal: Unable to open file 'LDDRAW.LIB'

några andra förslag?

Medlem sedan aug. 2001723 inlägg
#7

Inte LDDRAW. -l är en flagga och ddraw.lib är filnamnet. Det ska stå efter kompilatorns namn ockå.

g++ -lddraw.lib filnamn...

Medlem sedan maj 20002 993 inlägg
#8

Så här ser Makefile ut, ddraw.lib finns ju där!

Makefile

.AUTODEPEND

cpp = bcc32.exe
link = ilink32.exe
flags = -wuse -w-par -w-rch -c -O2 -X- -tW
linkflags = -Gn -Gi -aa -Tpe -x
libs = import32.lib cw32.lib dxguid.lib ddraw.lib uuid.lib dxextra.lib lddraw.lib
guistartup = c0w32.obj

all: pbdx.exe

main.obj: main.cpp dd.h
    $(cpp) $(flags) main.cpp
    
dd.obj: dd.cpp dd.h
    $(cpp) $(flags) dd.cpp
    
pbdx.exe: main.obj dd.obj
    $(link) $(linkflags) $(guistartup) main.obj dd.obj, pbdx.exe, , $(libs)
Medlem sedan sep. 20001 124 inlägg
#9

Alltså. Det ska stå -lddraw.lib på samma rad som flags-parametrarna.

Medlem sedan maj 20002 993 inlägg
#10

Jag får fortfarande samma fel!

Error: Unresolved external 'DirectDrawCreateEx' referenced from SÖKVÄG\DD.OBJ

Medlem sedan aug. 2001723 inlägg
#11

Jag ser inget fel i din makefil bortsett från att du möjligtvis måste ange vilken katalog som libfilerna ligger i (med flaggan -L).
Ändra

linkflags = -Gn -Gi -aa -Tpe -x

till
linkflags = -Gn -Gi -aa -Tpe -x -LC:\borland\lib
eller vad det nu är för katalog.

Medlem sedan maj 20002 993 inlägg
#12

Men det finns ju 2 cfg filer i bin katalogen i kompilatorn där jag redan har ställt in vart lib filerna ligger så det borde ju inte vara problemet.

Tror jag ska leta reda på nån annan DirectDraw tutorial...

Medlem sedan aug. 2001723 inlägg
#13

Testa lite för att lokalisera felet.

Skriv ett enkelt program,

#include <ddraw.h>

main() {
  DirectDrawCreateEx(....);
}

Kompilera på kommandoraden med
bcc32.exe -lddraw.lib filen.cpp

Blir det fortfarande samma fel? I så fall, kolla igenom filen ddraw.h och se ifall DirectDrawCreateEx finns med där. Finns den är det antagligen fel på inställningarna i dina config-filer. Blir det inget fel så används kanske inte makefilen när du kompilerar ditt andra exempel.

Medlem sedan maj 20002 993 inlägg
#14

Skrev koden så här:

#include <ddraw.h>

LPDIRECTDRAW7 lpDD = NULL;

int main()
{
	DirectDrawCreateEx(NULL, (void**)&lpDD, IID_IDirectDraw7, NULL);
	return 0;
}

och fick felet:

Fatal: Illegal option: aw.lib

/me fattar nada!
vad är aw.lib?!

278 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)