School Assignment? Project Due Tomorrow? Chat LIVE With A Programming Expert!

fatal error LNK1104: cannot open file 'd3dx9.lib' I'm very new in this direct-x programming. Hope can find the way t Rate Topic: -----

#1 iry  Icon User is offline

  • New D.I.C Head
  • Pip

Reputation: 0
  • View blog
  • Posts: 17
  • Joined: 16-September 07


Dream Kudos: 0

Share |

fatal error LNK1104: cannot open file 'd3dx9.lib'

Post icon  Posted 22 August 2008 - 12:12 PM

I am using visual studio team system 2008 and I try to run code with d3dx9 library but it doesn't work if I run a code using only d3d9 library the code compile and run without any problems. The d3dx9 and d3d9 libraries are in the same folder. And to use the code properly I can not ignore this library.

I do added "d3dx9.lib" to project's propertise > configuration propertise > Linker >Input
and include the lib folder at tools > option > projects and solution > vc++ directories > (win32)include files & library files, but doesn't work.

the code i'm trying to compile:
(taken from this page:http://www.directxtutorial.com/Tutorial9/B-Direct3DBasics/dx9B6.aspx#still)

// include the basic windows header files and the Direct3D header file
#include <windows.h>
#include <windowsx.h>
#include <d3d9.h>
#include <d3dx9.h>

// define the screen resolution and keyboard macros
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
#define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)

// include the Direct3D Library files
#pragma comment (lib, "d3d9.lib")
#pragma comment (lib, "d3dx9.lib")

// global declarations
LPDIRECT3D9 d3d;	// the pointer to our Direct3D interface
LPDIRECT3DDEVICE9 d3ddev;	// the pointer to the device class
LPDIRECT3DVERTEXBUFFER9 t_buffer = NULL;	// the pointer to the vertex buffer

// function prototypes
void initD3D(HWND hWnd);	// sets up and initializes Direct3D
void render_frame(void);	// renders a single frame
void cleanD3D(void);	// closes Direct3D and releases memory
void init_graphics(void);	// 3D declarations

struct CUSTOMVERTEX {FLOAT X, Y, Z; DWORD COLOR;};
#define CUSTOMFVF (D3DFVF_XYZ | D3DFVF_DIFFUSE)

// the WindowProc function prototype
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);


// the entry point for any Windows program
int WINAPI WinMain(HINSTANCE hInstance,
				   HINSTANCE hPrevInstance,
				   LPSTR lpCmdLine,
				   int nCmdShow)
{
	HWND hWnd;
	WNDCLASSEX wc;

	ZeroMemory(&wc, sizeof(WNDCLASSEX));

	wc.cbSize = sizeof(WNDCLASSEX);
	wc.style = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc = (WNDPROC)WindowProc;
	wc.hInstance = hInstance;
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	// wc.hbrBackground = (HBRUSH)COLOR_WINDOW;	// not needed any more
	wc.lpszClassName = L"WindowClass";

	RegisterClassEx(&wc);

	hWnd = CreateWindowEx(NULL, L"WindowClass", L"Our Direct3D Program",
						  WS_EX_TOPMOST | WS_POPUP, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT,
						  NULL, NULL, hInstance, NULL);

	  ShowWindow(hWnd, nCmdShow);

	// set up and initialize Direct3D
	initD3D(hWnd);

	// enter the main loop:

	MSG msg;

	while(TRUE)
	{
		DWORD starting_point = GetTickCount();

		if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
		{
			if (msg.message == WM_QUIT)
				break;

			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}

		render_frame();

		// check the 'escape' key
		if(KEY_DOWN(VK_ESCAPE))
			PostMessage(hWnd, WM_DESTROY, 0, 0);

		while ((GetTickCount() - starting_point) < 25);
	}

	// clean up DirectX and COM
	cleanD3D();

	return msg.wParam;
}


// this is the main message handler for the program
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
		case WM_DESTROY:
			{
				PostQuitMessage(0);
				return 0;
			} break;
	}

	return DefWindowProc (hWnd, message, wParam, lParam);
}


// this function initializes and prepares Direct3D for use
void initD3D(HWND hWnd)
{
	d3d = Direct3DCreate9(D3D_SDK_VERSION);

	D3DPRESENT_PARAMETERS d3dpp;

	ZeroMemory(&d3dpp, sizeof(d3dpp));
	d3dpp.Windowed = FALSE;
	d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
	d3dpp.hDeviceWindow = hWnd;
	d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
	d3dpp.BackBufferWidth = SCREEN_WIDTH;
	d3dpp.BackBufferHeight = SCREEN_HEIGHT;
	d3dpp.EnableAutoDepthStencil = TRUE;	// automatically run the z-buffer for us
	d3dpp.AutoDepthStencilFormat = D3DFMT_D16;	// 16-bit pixel format for the z-buffer

	// create a device class using this information and the info from the d3dpp stuct
	d3d->CreateDevice(D3DADAPTER_DEFAULT,
					  D3DDEVTYPE_HAL,
					  hWnd,
					  D3DCREATE_SOFTWARE_VERTEXPROCESSING,
					  &d3dpp,
					  &d3ddev);

	init_graphics();	// call the function to initialize the triangle

	d3ddev->SetRenderState(D3DRS_LIGHTING, FALSE);	// turn off the 3D lighting
	d3ddev->SetRenderState(D3DRS_ZENABLE, TRUE);	// turn on the z-buffer

	return;
}


// this is the function used to render a single frame
void render_frame(void)
{
	d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
	d3ddev->Clear(0, NULL, D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);

	d3ddev->BeginScene();

	// select which vertex format we are using
	d3ddev->SetFVF(CUSTOMFVF);

	  // set the view transform
	  D3DXMATRIX matView;	// the view transform matrix
	D3DXMatrixLookAtLH(&matView,
					   &D3DXVECTOR3 (0.0f, 0.0f, 15.0f),   // the camera position
					   &D3DXVECTOR3 (0.0f, 0.0f, 0.0f),	// the look-at position
					   &D3DXVECTOR3 (0.0f, 1.0f, 0.0f));	// the up direction
	d3ddev->SetTransform(D3DTS_VIEW, &matView);	// set the view transform to matView

	// set the projection transform
	D3DXMATRIX matProjection;	// the projection transform matrix
	D3DXMatrixPerspectiveFovLH(&matProjection,
							   D3DXToRadian(45),	// the horizontal field of view
							   (FLOAT)SCREEN_WIDTH / (FLOAT)SCREEN_HEIGHT, // aspect ratio
							   1.0f,	// the near view-plane
							   100.0f);	// the far view-plane
	d3ddev->SetTransform(D3DTS_PROJECTION, &matProjection);	 // set the projection


	// select the vertex buffer to display
	d3ddev->SetStreamSource(0, t_buffer, 0, sizeof(CUSTOMVERTEX));

	D3DXMATRIX matTranslateA;	// a matrix to store the translation for triangle A
	D3DXMATRIX matTranslateB;	// a matrix to store the translation for triangle B
	D3DXMATRIX matRotateYA;	// a matrix to store the rotation for each triangle
	D3DXMATRIX matRotateYB;	// a matrix to store the rotation for the reverse sides
	static float index = 0.0f; index+=0.05f; // an ever-increasing float value

	// build MULTIPLE matrices to rotate and translate the model
	D3DXMatrixTranslation(&matTranslateA, 0.0f, 0.0f, 2.0f);
	D3DXMatrixTranslation(&matTranslateB, 0.0f, 0.0f, -2.0f);
	D3DXMatrixRotationY(&matRotateYA, index);	// the front side
	D3DXMatrixRotationY(&matRotateYB, index + 3.14159f);	// the reverse side

	// tell Direct3D about each world transform, and then draw another triangle
	d3ddev->SetTransform(D3DTS_WORLD, &(matTranslateA * matRotateYA));
	d3ddev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

	d3ddev->SetTransform(D3DTS_WORLD, &(matTranslateA * matRotateYB));
	d3ddev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

	d3ddev->SetTransform(D3DTS_WORLD, &(matTranslateB * matRotateYA));
	d3ddev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

	d3ddev->SetTransform(D3DTS_WORLD, &(matTranslateB * matRotateYB));
	d3ddev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

	d3ddev->EndScene(); 

	d3ddev->Present(NULL, NULL, NULL, NULL);

	return;
}


// this is the function that cleans up Direct3D and COM
void cleanD3D(void)
{
	  t_buffer->Release();	// close and release the vertex buffer
	d3ddev->Release();	// close and release the 3D device
	d3d->Release();	// close and release Direct3D

	return;
}


// this is the function that puts the 3D models into video RAM
void init_graphics(void)
{
	// create the vertices using the CUSTOMVERTEX struct
	CUSTOMVERTEX t_vert[] = 
	{
		{ 2.5f, -3.0f, 0.0f, D3DCOLOR_XRGB(0, 0, 255), },
		{ 0.0f, 3.0f, 0.0f, D3DCOLOR_XRGB(0, 255, 0), },
		{ -2.5f, -3.0f, 0.0f, D3DCOLOR_XRGB(255, 0, 0), },
	};

	// create a vertex buffer interface called t_buffer
	d3ddev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),
							   0,
							   CUSTOMFVF,
							   D3DPOOL_MANAGED,
							   &t_buffer,
							   NULL);

	VOID* pVoid;	// a void pointer

	// lock t_buffer and load the vertices into it
	t_buffer->Lock(0, 0, (void**)&pVoid, 0);
	memcpy(pVoid, t_vert, sizeof(t_vert));
	t_buffer->Unlock();

	return;
}



can someone help me up...?
Was This Post Helpful? 0
  • +
  • -


#2 Salv0  Icon User is offline

  • New D.I.C Head
  • Pip

Reputation: 2
  • View blog
  • Posts: 17
  • Joined: 31-July 08


Dream Kudos: 0

Re: fatal error LNK1104: cannot open file 'd3dx9.lib'

Posted 22 August 2008 - 12:35 PM

Well, comment the #pragma directives ;)

If you add the lib files with: propertise > configuration propertise > Linker >Input> additional dep, you can't use the pragma.
Just choose one of the two :P

This post has been edited by Salv0: 22 August 2008 - 12:37 PM

Was This Post Helpful? 0
  • +
  • -

#3 iry  Icon User is offline

  • New D.I.C Head
  • Pip

Reputation: 0
  • View blog
  • Posts: 17
  • Joined: 16-September 07


Dream Kudos: 0

Re: fatal error LNK1104: cannot open file 'd3dx9.lib'

Posted 22 August 2008 - 12:45 PM

View PostSalv0, on 22 Aug, 2008 - 01:35 PM, said:

Well, comment the #pragma directives ;)

If you add the lib files with: propertise > configuration propertise > Linker >Input> additional dep, you can't use the pragma.
Just choose one of the two :P


thanks for the tips. but it doesn't work too..
Was This Post Helpful? 0
  • +
  • -

#4 KYA  Icon User is offline

  • while(sad){!sad; awesome();}
  • Icon

Reputation: 1181
  • View blog
  • Posts: 15,532
  • Joined: 14-September 07


Dream Kudos: 3125

Expert In: C, C++, Java

Re: fatal error LNK1104: cannot open file 'd3dx9.lib'

Posted 22 August 2008 - 04:40 PM

Did you install the latest DirectX SDK? (I have June 2008, but I think they just released another).

Those libs go in the system folder.
Was This Post Helpful? 0
  • +
  • -

#5 iry  Icon User is offline

  • New D.I.C Head
  • Pip

Reputation: 0
  • View blog
  • Posts: 17
  • Joined: 16-September 07


Dream Kudos: 0

Re: fatal error LNK1104: cannot open file 'd3dx9.lib'

Posted 22 August 2008 - 10:06 PM

View PostKYA, on 22 Aug, 2008 - 05:40 PM, said:

Did you install the latest DirectX SDK? (I have June 2008, but I think they just released another).

Those libs go in the system folder.


isit? i try it nw
Was This Post Helpful? 0
  • +
  • -

#6 iry  Icon User is offline

  • New D.I.C Head
  • Pip

Reputation: 0
  • View blog
  • Posts: 17
  • Joined: 16-September 07


Dream Kudos: 0

Re: fatal error LNK1104: cannot open file 'd3dx9.lib'

Posted 23 August 2008 - 09:04 AM

error:
FCG-Assignment1.obj : error LNK2019: unresolved external symbol _Direct3DCreate9@4 referenced in function "void __cdecl initD3D(struct HWND__ *)" (?initD3D@@YAXPAUHWND__@@@Z)
Was This Post Helpful? 0
  • +
  • -

#7 KYA  Icon User is offline

  • while(sad){!sad; awesome();}
  • Icon

Reputation: 1181
  • View blog
  • Posts: 15,532
  • Joined: 14-September 07


Dream Kudos: 3125

Expert In: C, C++, Java

Re: fatal error LNK1104: cannot open file 'd3dx9.lib'

Posted 23 August 2008 - 09:30 AM

it cannot find the lib file to find the definition of that function
Was This Post Helpful? 0
  • +
  • -

#8 iry  Icon User is offline

  • New D.I.C Head
  • Pip

Reputation: 0
  • View blog
  • Posts: 17
  • Joined: 16-September 07


Dream Kudos: 0

Re: fatal error LNK1104: cannot open file 'd3dx9.lib'

Posted 23 August 2008 - 11:37 PM

View PostKYA, on 23 Aug, 2008 - 10:30 AM, said:

it cannot find the lib file to find the definition of that function


means how? :blink:
Was This Post Helpful? 0
  • +
  • -

#9 KYA  Icon User is offline

  • while(sad){!sad; awesome();}
  • Icon

Reputation: 1181
  • View blog
  • Posts: 15,532
  • Joined: 14-September 07


Dream Kudos: 3125

Expert In: C, C++, Java

Re: fatal error LNK1104: cannot open file 'd3dx9.lib'

Posted 24 August 2008 - 07:34 AM

Did you install the DirectX SDK? Did you put the \include folder into your \include folder of your compiler?
Was This Post Helpful? 0
  • +
  • -

#10 WolfCoder  Icon User is offline

  • Also a resident Witch. Yes, really.
  • Icon

Reputation: 115
  • View blog
  • Posts: 6,035
  • Joined: 05-May 05


Dream Kudos: 1675

Expert In: ゲームのプログラム、かわいい

Re: fatal error LNK1104: cannot open file 'd3dx9.lib'

Posted 24 August 2008 - 10:31 AM

Make sure the .lib file is where you think it is. I always copy it and paste it into my project root and then add it to my project to make sure. This way I can even move it around on my thumb drive with no worries.

This post has been edited by WolfCoder: 24 August 2008 - 10:31 AM

Was This Post Helpful? 0
  • +
  • -

#11 smooth2012  Icon User is offline

  • New D.I.C Head
  • Pip

Reputation: 0
  • View blog
  • Posts: 2
  • Joined: 05-December 09


Dream Kudos: 0

Re: fatal error LNK1104: cannot open file 'd3dx9.lib'

Posted 15 December 2009 - 09:53 PM

View PostWolfCoder, on 24 Aug, 2008 - 10:31 AM, said:

Make sure the .lib file is where you think it is. I always copy it and paste it into my project root and then add it to my project to make sure. This way I can even move it around on my thumb drive with no worries.



Do you mean like this C:\Program Files (x86)\Microsoft DirectX SDK (August 2009)\Lib\x64 ? That all?

I had same problem also so where do I put the C:\Program Files (x86)\Microsoft DirectX SDK (August 2009)\Lib\x64 in my program?
Was This Post Helpful? 0
  • +
  • -

#12 Guest_Triangl*


Reputation:

Re: fatal error LNK1104: cannot open file 'd3dx9.lib'

Posted 16 June 2010 - 12:45 PM

Well i had same problem in Visual Studio 2008
Try to open Tools->Options->Projects and Solutions->VC++ Directories ,
and here choose :
Platform: Win32
and
Show directories for :Library files
and add here path to folder where d3dx9.lib is situated
For example D:\DirectX_SDK\Lib\x86
To use header-files in program ,for example such code like:
#include <d3dx9.h>
you need to choose:
Platform: Win32
and
Show directories for :Include files
and add here path to folder where d3dx9.h is situated
For example D:\DirectX_SDK\Include
And add in Project->Properties->Configuration Properties->Linker->Input & Additional Dependences :
d3d9.lib d3dx9.lib
Was This Post Helpful? 0



Fast Reply

  

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users