This is the mail archive of the
pthreads-win32@sources.redhat.com
mailing list for the pthreas-win32 project.
Re: Problem linking in pthread librarry.... (Newbie)
- From: Ross Johnson <rpj at callisto dot canberra dot edu dot au>
- To: Ed Hume <hume at hume dot com>
- Cc: Srdjan <srdjan at jsn dot aust dot com>, pthreads-win32 at sources dot redhat dot com
- Date: Tue, 13 Jan 2004 17:11:49 +1100
- Subject: Re: Problem linking in pthread librarry.... (Newbie)
- References: <BCELLHAMIHIGLPHLFKFCIEACCAAA.srdjan@jsn.aust.com> <3FFD6A6A.3030405@hume.com>
- Reply-to: rpj at callisto dot canberra dot edu dot au
Ed Hume wrote:
I believe the __imp__ prefix comes from the functions being declared
as DLL imported/exported symbols. So I think you need to go review
the header files, and fix up some macros in your makefile so that the
__declspec(dllexport) macros are not used. (For example, have your
definition of PTW_EXTERN)
If that's all that's required, I propose to change the following in
pthread.h:-
#ifdef _DLL
# ifdef PTW32_BUILD
# define PTW32_DLLPORT __declspec (dllexport)
# else
# define PTW32_DLLPORT __declspec (dllimport)
# endif
#endif
to:-
#ifndef PTW32_STATIC
# ifdef PTW32_BUILD
# define PTW32_DLLPORT __declspec (dllexport)
# else
# define PTW32_DLLPORT __declspec (dllimport)
# endif
#endif
And require that PTW32_STATIC be defined explicitly as a compiler flag
for both static library build and application build.
Thanks.
Ross
Srdjan wrote:
Hi,
After reading all the readme's and FAQs I still have a bit of a problem
linking with pthread for win32. Somebody might have already solved it...
Here is the problem....
I am porting a small daemon program from linux to win32 (... yes, I
know...). Anyway, becasue this little beast is supposed to be used on
systems that I am unable to install the pthread.dll, I am trying to
build a
static pthread library and link it in with my code.
I have fudged building process using VC7.1 (.NET) so it does build a
.lib
file, however, when I try linking with my code, I get the following link
problems:
============================================================================
=============
fdca.obj : error LNK2019: unresolved external symbol __imp__pthread_join
referenced in function _main
fdca.obj : error LNK2019: unresolved external symbol
__imp__pthread_create
referenced in function _main
fdca_schedule.obj : error LNK2001: unresolved external symbol
__imp__pthread_create
fdca_collect.obj : error LNK2019: unresolved external symbol
__imp__pthread_exit referenced in function _fdca_collect
fdca_command.obj : error LNK2019: unresolved external symbol
__imp__pthread_exit referenced in function _fdca_command
fdca_schedule.obj : error LNK2001: unresolved external symbol
__imp__pthread_exit
ds.lib(ds.obj) : error LNK2019: unresolved external symbol
__imp__pthread_mutex_init referenced in function _ds_list_init
ds.lib(ds.obj) : error LNK2019: unresolved external symbol
__imp__pthread_mutex_unlock referenced in function _ds_list_insert
ds.lib(ds.obj) : error LNK2019: unresolved external symbol
__imp__pthread_mutex_lock referenced in function _ds_list_insert
.\/winagent.exe : fatal error LNK1120: 7 unresolved externals
============================================================================
=============
Now, I am sure I have stuffed up something, but I can't figure out what
(obvious conclusion :-). My code seems to generate
'__imp__function_name'
instead of '_function_name'. I have a number of other external static
libraries I am linking with, but they all seem to be linking in happily.
The Makefile with nmake builds only a DLL version, and I am trying at
the
moment to get it to build a static lib too, but with not much success.
I would be ethernally grateful if somebody was able to quickly
identify what
I am doing wrong.
Cheers,
Srdjan
Melbourne