public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
* undefined reference to `_CAPI_INSTALLED@0', why?
@ 2005-06-30 21:02 Gerrit P. Haase
  2005-06-30 21:29 ` Gerrit P. Haase
  2005-07-01  9:46 ` Dave Korn
  0 siblings, 2 replies; 5+ messages in thread
From: Gerrit P. Haase @ 2005-06-30 21:02 UTC (permalink / raw)
  To: cygwin

Hello All,

I'm sure that this is covered somewhere, however I cannot find it
currently;)

Ok, I try to build a Cygwin application that requires CAPI functions
which are installed with the drivers for an ISDN card, the DLL is named
capi2032.dll, I have an import library which comes from the manufacturer
AVM but this contains symbols not included in the DLL or elsewhere.

In the .lib library are these symbols:

$ nm capi2032.lib | grep ' T '
00000000 T _CAPI_GET_MANUFACTURER@4
00000000 T _CAPI_GET_MESSAGE@8
00000000 T _CAPI_GET_PROFILE@8
00000000 T _CAPI_GET_SERIAL_NUMBER@4
00000000 T _CAPI_GET_VERSION@16
00000000 T _CAPI_INSTALLED@0
00000000 T _CAPI_MANUFACTURER@20
00000000 T _CAPI_PUT_MESSAGE@8
00000000 T _CAPI_REGISTER@20
00000000 T _CAPI_RELEASE@4
00000000 T _CAPI_WAIT_FOR_SIGNAL@4
00000000 T _TASK_REGISTER@12
00000000 T _TASK_RELEASE@4

in the import library I created are these symbols:

$ nm libcapi2032.dll.a | grep ' T '
00000000 T _TASK_RELEASE
00000000 T _TASK_REGISTER
00000000 T _CAPI_WAIT_FOR_SIGNAL
00000000 T _CAPI_SET_SIGNAL_FOR_16BIT
00000000 T _CAPI_RELEASE
00000000 T _CAPI_REGISTER
00000000 T _CAPI_PUT_MESSAGE
00000000 T _CAPI_MANUFACTURER
00000000 T _CAPI_INSTALLED
00000000 T _CAPI_GET_VERSION
00000000 T _CAPI_GET_SERIAL_NUMBER
00000000 T _CAPI_GET_PROFILE
00000000 T _CAPI_GET_MESSAGE_FOR_16BIT
00000000 T _CAPI_GET_MESSAGE
00000000 T _CAPI_GET_MANUFACTURER

Now linking against my import library gives me this errors:

Creating library file: .libs/libSimpleCapi.dll.a
.libs/capi20.o: In function `CAPI20_ISINSTALLED':
/p/ftproot/pub/asterisk/caiviar-0.3.5/src/capi20.c:68: undefined 
reference to `_CAPI_INSTALLED@0'
[...]


Where does the @0 in capi20.o: _CAPI_INSTALLED@0 came from?

I see in the source:

extern DWORD APIENTRY CAPI_INSTALLED (void);

unsigned CAPI20_ISINSTALLED (void) {
#if defined(CYGWIN) || defined(WIN32)
     return (unsigned)CAPI_INSTALLED () == 0;
#elif defined(LINUX)
     return capi20_isinstalled() == CapiNoError;
#endif


So why does the compiler creats a reference to _CAPI_INSTALLED@0 or
is it the linker who wants to resolve CAPI_INSTALLED with @0 attached.

Sure, I could edit my .def file and create an import library that 
contains the symbol names as expected by the linker, however I want
to know why this happens.

Is the docu around which explains it or can somebody who knows what
happens here tell me, please?


Gerrit
-- 
=^..^=

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: undefined reference to `_CAPI_INSTALLED@0', why?
  2005-06-30 21:02 undefined reference to `_CAPI_INSTALLED@0', why? Gerrit P. Haase
@ 2005-06-30 21:29 ` Gerrit P. Haase
  2005-07-01  9:46 ` Dave Korn
  1 sibling, 0 replies; 5+ messages in thread
From: Gerrit P. Haase @ 2005-06-30 21:29 UTC (permalink / raw)
  To: cygwin

Gerrit P. Haase wrote:

> Sure, I could edit my .def file and create an import library that 
> contains the symbol names as expected by the linker, however I want
> to know why this happens.

No, I cannot, or at least if I do so the symbols cannot be resolved at
runtime.


Gerrit
-- 
=^..^=

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: undefined reference to `_CAPI_INSTALLED@0', why?
  2005-06-30 21:02 undefined reference to `_CAPI_INSTALLED@0', why? Gerrit P. Haase
  2005-06-30 21:29 ` Gerrit P. Haase
@ 2005-07-01  9:46 ` Dave Korn
       [not found]   ` <42C52EA6.5090300@familiehaase.de>
  2005-07-16  1:00   ` Gerrit P. Haase
  1 sibling, 2 replies; 5+ messages in thread
From: Dave Korn @ 2005-07-01  9:46 UTC (permalink / raw)
  To: 'cygwin'

----Original Message----
>From: Gerrit P. Haase
>Sent: 30 June 2005 21:09

> Ok, I try to build a Cygwin application that requires CAPI functions
> which are installed with the drivers for an ISDN card, the DLL is named
> capi2032.dll, I have an import library which comes from the manufacturer
> AVM but this contains symbols not included in the DLL or elsewhere.
> 
> In the .lib library are these symbols:
> 
> $ nm capi2032.lib | grep ' T '

> 00000000 T _CAPI_INSTALLED@0

  That's a stdcall symbol.

> in the import library I created are these symbols:
> 
> $ nm libcapi2032.dll.a | grep ' T '

> 00000000 T _CAPI_INSTALLED

  That's a cdecl symbol.

> Where does the @0 in capi20.o: _CAPI_INSTALLED@0 came from?

  It comes from it being a stdcall symbol.
 
> I see in the source:
> 
> extern DWORD APIENTRY CAPI_INSTALLED (void);
> 
> unsigned CAPI20_ISINSTALLED (void) {
> #if defined(CYGWIN) || defined(WIN32)
>      return (unsigned)CAPI_INSTALLED () == 0;
> #elif defined(LINUX)
>      return capi20_isinstalled() == CapiNoError;
> #endif
> 
> 
> So why does the compiler creats a reference to _CAPI_INSTALLED@0 or
> is it the linker who wants to resolve CAPI_INSTALLED with @0 attached.

  Has the definition of APIENTRY has changed between the mfr's build from
which the import library came and the build from which you generated your
import lib?

    cheers,
      DaveK
-- 
Can't think of a witty .sigline today....


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: undefined reference to `_CAPI_INSTALLED@0', why?
       [not found]   ` <42C52EA6.5090300@familiehaase.de>
@ 2005-07-01 12:14     ` Gerrit P. Haase
  0 siblings, 0 replies; 5+ messages in thread
From: Gerrit P. Haase @ 2005-07-01 12:14 UTC (permalink / raw)
  To: cygwin

Gerrit P. Haase wrote:

> Dave,
> 
>>> So why does the compiler creats a reference to _CAPI_INSTALLED@0 or
>>> is it the linker who wants to resolve CAPI_INSTALLED with @0 attached.
>>
>>
>>
>>   Has the definition of APIENTRY has changed between the mfr's build from
>> which the import library came and the build from which you generated your
>> import lib?
> 
> 
> Many thanks, that is it:
> 
> #  define APIENTRY __attribute__((stdcall))
> 
> How do I create an import library with stdcall convention now?
> 
> Simply adding --add-stdcall-alias flag for dlltool seems to have no
> effect.

It is not really needed to edit the .def file manually?
Is it?

Gerrit
-- 
=^..^=

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: undefined reference to `_CAPI_INSTALLED@0', why?
  2005-07-01  9:46 ` Dave Korn
       [not found]   ` <42C52EA6.5090300@familiehaase.de>
@ 2005-07-16  1:00   ` Gerrit P. Haase
  1 sibling, 0 replies; 5+ messages in thread
From: Gerrit P. Haase @ 2005-07-16  1:00 UTC (permalink / raw)
  To: cygwin

Dave,

>>So why does the compiler creats a reference to _CAPI_INSTALLED@0 or
>>is it the linker who wants to resolve CAPI_INSTALLED with @0 attached.
> 
> 
>   Has the definition of APIENTRY has changed between the mfr's build from
> which the import library came and the build from which you generated your
> import lib?

Many thanks, that is it:

#  define APIENTRY __attribute__((stdcall))


Gerrit
-- 
=^..^=


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2005-07-16  1:00 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-06-30 21:02 undefined reference to `_CAPI_INSTALLED@0', why? Gerrit P. Haase
2005-06-30 21:29 ` Gerrit P. Haase
2005-07-01  9:46 ` Dave Korn
     [not found]   ` <42C52EA6.5090300@familiehaase.de>
2005-07-01 12:14     ` Gerrit P. Haase
2005-07-16  1:00   ` Gerrit P. Haase

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).