Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

peter86

Linker errors

This topic is 5677 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I''m getting these linker errors using Dev-C++: [Linker error] undefined reference to `Direct3DCreate8@4'' [Linker error] undefined reference to `D3DXMatrixRotationY@8'' [Linker error] undefined reference to `D3DXMatrixLookAtLH@16'' [Linker error] undefined reference to `D3DXMatrixPerspectiveFovLH@20'' What''s wrong?

Share this post


Link to post
Share on other sites
Advertisement
I added those line, but now I'm getting these warnings instead:

In file included from test.cpp:13:
mmsystem.h:21: warning: `MAKEFOURCC' redefined
d3d8types.h:1224: warning: this is the location of the previous definition
test.cpp: In function `void SetupMatrices()':
test.cpp:149: warning: taking address of temporary
test.cpp:150: warning: taking address of temporary
test.cpp:151: warning: taking address of temporary

And it dosen't make a exe though there where zero errors. Why?

[edited by - peter86 on January 31, 2003 5:46:02 AM]

Share this post


Link to post
Share on other sites
Sure.


  
// include files ////////////////////////////////////////////////////////////


#include <d3dx8.h>
#include <mmsystem.h>
#pragma comment( lib, "dxguid.lib" )
#pragma comment( lib, "d3d8.lib" )

//-----------------------------------------------------------------------------

// Global variables

//-----------------------------------------------------------------------------

LPDIRECT3D8 g_pD3D = NULL; // Used to create the D3DDevice

LPDIRECT3DDEVICE8 g_pd3dDevice = NULL; // Our rendering device

LPDIRECT3DVERTEXBUFFER8 g_pVB = NULL; // Buffer to hold vertices


// A structure for our custom vertex type

struct CUSTOMVERTEX
{
FLOAT x, y, z; // The untransformed, 3D position for the vertex

DWORD color; // The vertex color

};

// Our custom FVF, which describes our custom vertex structure

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)




//-----------------------------------------------------------------------------

// Name: InitD3D()

// Desc: Initializes Direct3D

//-----------------------------------------------------------------------------

HRESULT InitD3D( HWND hWnd )
{
// Create the D3D object.

if( NULL == ( g_pD3D = Direct3DCreate8( D3D_SDK_VERSION ) ) )
return E_FAIL;

// Get the current desktop display mode, so we can set up a back

// buffer of the same format

D3DDISPLAYMODE d3ddm;
if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )
return E_FAIL;

// Set up the structure used to create the D3DDevice

D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = d3ddm.Format;

// Create the D3DDevice

if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice ) ) )
{
return E_FAIL;
}

// Turn off culling, so we see the front and back of the triangle

g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );

// Turn off D3D lighting, since we are providing our own vertex colors

g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );

return S_OK;
}




//-----------------------------------------------------------------------------

// Name: InitGeometry()

// Desc: Creates the scene geometry

//-----------------------------------------------------------------------------

HRESULT InitGeometry()
{
// Initialize three vertices for rendering a triangle

CUSTOMVERTEX g_Vertices[] =
{
{ -1.0f,-1.0f, 0.0f, 0xffff0000, },
{ 1.0f,-1.0f, 0.0f, 0xff0000ff, },
{ 0.0f, 1.0f, 0.0f, 0xffffffff, },
};

// Create the vertex buffer.

if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB ) ) )
{
return E_FAIL;
}

// Fill the vertex buffer.

VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(g_Vertices), (BYTE**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, g_Vertices, sizeof(g_Vertices) );
g_pVB->Unlock();

return S_OK;
}




//-----------------------------------------------------------------------------

// Name: Cleanup()

// Desc: Releases all previously initialized objects

//-----------------------------------------------------------------------------

VOID Cleanup()
{
if( g_pVB != NULL )
g_pVB->Release();

if( g_pd3dDevice != NULL )
g_pd3dDevice->Release();

if( g_pD3D != NULL )
g_pD3D->Release();
}



//-----------------------------------------------------------------------------

// Name: SetupMatrices()

// Desc: Sets up the world, view, and projection transform matrices.

//-----------------------------------------------------------------------------

VOID SetupMatrices()
{
// For our world matrix, we will just rotate the object about the y-axis.

D3DXMATRIX matWorld;
D3DXMatrixRotationY( &matWorld, timeGetTime()/150.0f );
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

// Set up our view matrix. A view matrix can be defined given an eye point,

// a point to lookat, and a direction for which way is up. Here, we set the

// eye five units back along the z-axis and up three units, look at the

// origin, and define "up" to be in the y-direction.

D3DXMATRIX matView;
D3DXMatrixLookAtLH( &matView, &D3DXVECTOR3( 0.0f, 3.0f,-5.0f ),
&D3DXVECTOR3( 0.0f, 0.0f, 0.0f ),
&D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

// For the projection matrix, we set up a perspective transform (which

// transforms geometry from 3D view space to 2D viewport space, with

// a perspective divide making objects smaller in the distance). To build

// a perpsective transform, we need the field of view (1/4 pi is common),

// the aspect ratio, and the near and far clipping planes (which define at

// what distances geometry should be no longer be rendered).

D3DXMATRIX matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}



//-----------------------------------------------------------------------------

// Name: Render()

// Desc: Draws the scene

//-----------------------------------------------------------------------------

VOID Render()
{
// Clear the backbuffer to a black color

g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,128), 1.0f, 0 );

// Begin the scene

g_pd3dDevice->BeginScene();

// Setup the world, view, and projection matrices

SetupMatrices();

// Render the vertex buffer contents

g_pd3dDevice->SetStreamSource( 0, g_pVB, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetVertexShader( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1 );

// End the scene

g_pd3dDevice->EndScene();

// Present the backbuffer contents to the display

g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}




//-----------------------------------------------------------------------------

// Name: MsgProc()

// Desc: The window''s message handler

//-----------------------------------------------------------------------------

LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}

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




//-----------------------------------------------------------------------------

// Name: WinMain()

// Desc: The application''s entry point

//-----------------------------------------------------------------------------

INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
// Register the window class

WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
"Ch6p2_FirstScene", NULL };
RegisterClassEx( &wc );

// Create the application''s window

HWND hWnd = CreateWindowEx(0, "MyCoolWindow", "My First Window",
WS_POPUP | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME,
50, 50, 200, 100, NULL, NULL, hInst, NULL);


// Initialize Direct3D

if( SUCCEEDED( InitD3D( hWnd ) ) )
{
// Create the scene geometry

if( SUCCEEDED( InitGeometry() ) )
{
// Show the window

ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );

// Enter the message loop

MSG msg;
ZeroMemory( &msg, sizeof(msg) );
while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
Render();
}
}
}

// Clean up everything and exit the app

Cleanup();
return 0;
}

Share this post


Link to post
Share on other sites
quote:
Original post by Pipo DeClown
[quote]Original post by Pipo DeClown
if you need mmsystem.h:

#pragma comment( lib, "winmm.lib" )

.lick



Have you used this?

.lick


Of course, I tried but it didn't work.

[edited by - peter86 on January 31, 2003 6:44:09 AM]

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!