Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Newbie question: Need for header file when linking to static library

13 views
Skip to first unread message

m...@here.com

unread,
Nov 7, 2009, 11:40:39 AM11/7/09
to

Hi

I'm trying to use a 3rd party static library file. It's called
swedll32.lib..I've added it to my MFC Project.

When I try to call a function, I get: "identifier not found"

Don't I need a "swedll32.h" file to go along with the swedll32.lib
file?

All I have is a swedll32.dll and a swedll32.lib file.


thanks

Tony C.

Geoff

unread,
Nov 7, 2009, 12:00:19 PM11/7/09
to

Are you referring to the Swiss Ephemeris DLL? If so, a google search
of swedll32 turned up this:

http://www.expreso.co.cr/centaurs/version2.0.html

ftp://ftp.astro.com/pub/swisseph/sweph.zip

m...@here.com

unread,
Nov 7, 2009, 12:51:04 PM11/7/09
to
Yes, i do have the zip file and I've got a swedll.h, and swephexp.h
file with prototypes that look like:

swedll.h
DllImport int FAR PASCAL swe_set_ephe_path_d(char *path);

swephexp.h
ext_def( void ) swe_set_ephe_path(char *path);


so maybe the .h file does not have to be the exact name of the
.lib file?


perhaps I'm supposed to use one of the above files....


==>>Does a header file have to have the same name as the .lib file
then?

Thanks, Tony C.

On Sat, 07 Nov 2009 09:00:19 -0800, Geoff <ge...@invalid.invalid>
wrote:

Geoff

unread,
Nov 7, 2009, 5:11:21 PM11/7/09
to
On Sat, 07 Nov 2009 11:51:04 -0600, m...@here.com wrote:

>Yes, i do have the zip file and I've got a swedll.h, and swephexp.h
>file with prototypes that look like:
>
>swedll.h
>DllImport int FAR PASCAL swe_set_ephe_path_d(char *path);
>
>swephexp.h
>ext_def( void ) swe_set_ephe_path(char *path);
>
>
>so maybe the .h file does not have to be the exact name of the
>.lib file?
>
>
>perhaps I'm supposed to use one of the above files....
>
>
>==>>Does a header file have to have the same name as the .lib file
>then?
>
>
>
>Thanks, Tony C.
>

No, the header can be named almost anything. The examples show
inclusion of both swephexp.h and swedll.h and there are macro guards
to prevent double inclusions and swedll.h includes swephexp.h
automatically and swephexp.h includes sweodef.h.

The documentation states you need the DLL, the .lib and the three
header files to compile in C:

swedll.h
swephexp.h
sweodef.h

You may also need swepcalc.h for the Placalc API.

Tony C.

unread,
Nov 7, 2009, 9:54:17 PM11/7/09
to


Thanks...

Tony C.

unread,
Nov 7, 2009, 9:59:46 PM11/7/09
to

Hey Geof,,

THANKS VERY MUCH!!!

After 12 hours of working on this - pulling out my hair
the way you just explained it got it for me...

I was getting Linker errors all day long....!!!


so

THANKS AGAIN!

Tony C.


Joseph M. Newcomer

unread,
Nov 7, 2009, 10:20:30 PM11/7/09
to
You failed to mention where that message comes from. If you are a beginner, and want
advice on an error message, it is absolutely critical that you copy the error message *IN
ITS ENTIRETY* from the window and paste it into the message. For example, you have not
stated if this is a compiler error (in which case, the failure to have specified header
file included in your compilation is the problem). If it failed during linking, it might
have said something like "somename@yzzzwz identifier not found", in which case it means
you have a DLL which has C-style entry points and you did not use the header file, which
should declare them as C-style entry points; otherwise C++ naming conventions are used.

So, in the absence of any useful information that would help us analyze your problem,
either you have failed to include the proper header file during the build process, or you
failed to specify the proper name specification during the build process, or it is failing
to find the library file (possibly because your specification of it to the linker is not
correct).

Please provide ALL necessary information.

A proper header file, by the way, typically has something like

#ifdef __cplusplus
extern "C" {
#endif

void SomeFunction();
void OtherFunction();
#ifdef __cplusplus
}
#endif

or

#ifdef __cplusplus
#define SOMENAME extern "C"
#else
#define SOMENAME
#endif

SOMENAME void SomeFunction();
SOMENAME void OtherFunction();

failure to do this will mean that your C++ program cannot be linked with a C-based DLL.
joe

On Sat, 07 Nov 2009 10:40:39 -0600, m...@here.com wrote:

Joseph M. Newcomer [MVP]
email: newc...@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm

Geoff

unread,
Nov 7, 2009, 11:41:48 PM11/7/09
to

No doubt all kinds of function prototype errors as well.

You're welcome. Good luck.

0 new messages