This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Lot of undefined symbols at link time, even with -l option on good libraries


Larry Hall wrote:
> At 12:15 PM 9/21/2004, you wrote:
> 
>>I think you're right, it seems to be a problem with trailing underscore in function naming.
>>For example :
>>
>>in /usr/lib/w32api/libkernel32.a we found :
>>
>>  00000000 T _FormatMessageA@28
>>                   U __head_libkernel32_a
>>  00000000 I __imp__FormatMessageA@28
>>
>>which is required by win32-winbase.o, result of the build of /usr/lib/gcc/win32ada/win32-winbase.adb
>>       U _FormatMessageA
>>       U _FormatMessageW
>>       U _GlobalReAlloc
>>       U _LocalReAlloc
>>
>>The source code for this part is the following :
>> pragma Import (Stdcall, Doit, "FormatMessageA");
>>
>>I try change it with pragma Import (C, Doit, "_FormatMessageA"); or things like that with no success.
>>
>>May be it's the trailing @28 after symbol name which cause error, but I cannot control it ( it's DLL calling convention parameter size ). Compiler/linker should usually add or remove trailing @nn if necessary.
>>
>>To answer your general questions, I'am building a large Ada application ( 200 source files ), using W32 API, with Win2000 GNAT Compiler.
> 
> Sorry, I know nothing about Ada and how it works.  If the "pragma" statement
> is supposed to take the place of the traditional function prototype in C/C++,
> then I agree that it looks "OK" (again, based on my knowledge of Ada).  But
> the result is that it's looking for symbols that use the 'C' calling 
> convention rather than the 'stdcall' calling convention.  The libraries you
> are linking to want the 'stdcall' calling convention (since it is the 
> default for Windows).  If you cannot get Ada to ask for the proper symbol, 
> you could try using the '--enable-stdcall-fixup' option (for 'ld') to 
> attempt to massage away the problem.

The syntax for Pragma Import is:

         pragma Import(
             [Convention =>] convention_identifier, [Entity =>] local_name
          [, [External_Name =>] string_expression] [, [Link_Name =>] string_expression]);

It might be worth experimenting with using Link_Name instead of External_Name - this
should enable you to specify exactly what the link name generated by the Ada system is.

-- Cliff

--
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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]