Linking Error

Hi guys,

So I have this little solution with 3 projects and when I compile I am getting a linking error. I am using Visual Studio 2010 by the way.

1.error LNK2019:unresolved external symbol_func_2 referenced in function "void_cdecl func_1(void)"(?func_1@@YAXXZ)
2.error LNK1120: unresolved externals


I am not sure why and it has been bothering me for days.

The solution is just exporting some DLL's, very simple!

****** Project 1 **************
SHARETAP32.H
1
2
3
4
5
6
7
#ifdef DLLEXPORTIMPORT
	#define EXPORT_IMPORT _declspec(dllexport)
#else
	#define EXPORT_IMPORT _declspec(dllimport)
#endif

extern "C" void EXPORT_IMPORT Func_2( int a );


SHARETAP32.CPP
1
2
3
4
5
6
7
#define DLLEXPORTIMPORT
#include "sharetap32.h"

void func_2( int a )
{
	// Stub for now!
}

****** Project 1 **************


****** Project 2 **************
WINDEF32.H
1
2
3
4
5
6
7
#ifdef DLLEXPORTIMPORT
	#define EXPORT_IMPORT _declspec(dllexport)
#else
	#define EXPORT_IMPORT _declspec(dllimport)
#endif

extern "C" void EXPORT_IMPORT Func_1();


WINDEF32.CPP
1
2
#define DLLEXPORTIMPORT
#include "windef32.h" 

****** Project 2 **************


****** Project 3 **************
WINTAP32.H
1
2
3
4
5
struct Person
{
	char *name;
	int age;
};


WINDEF32.CPP
1
2
3
4
5
6
7
#include "wintap32.h"
#include "sharetap32\sharetap32.h"

void Func_1()
{
	func_2( 3 );
}

****** Project 3 **************

Do you guys know what the issue is? I am pretty sure it is due to the func_2( int a ) but I am not sure.
Last edited on
The functions in the .cpp files need to be exported too, not just the prototypes. Use depends to see what's in the DLL files. BTW, if a .lib file isn't generated, you're probably not exporting anything.
Yes! That solved the issue for me.

I didn't realize this until now.

Its funny though that my other practice/test solutions worked, although admittedly I didn't have a function calling another function inside it like I do above.
Would anyone be able to clarify that little difference?

Another question, with this code that I am working on at the moment I noticed that some functions are exported with
extern "C"
whilst some are not...

Is there a reason for this?
1
2
extern "C" int far _declspec(dllexport) WeeksLate(int myear, char far *fdate, char far *tdate);
void far _declspec(dllexport) PrintItemTitle (HDC hdcPrn,int ypos,int lMarg,int rMarg,int cxPage,int year);


I also noticed some functions are exported like so
1
2
3
_declspec(dllexport) void func_2( int a )
and others like
void _declspec(dllexport) func_2( int a )


I am just wondering is there a difference in the order? I have tried compiling both ways without problems.

Thanks KBW for that answer!
Last edited on
Topic archived. No new replies allowed.