RE: RE: undefined reference to `_msgDebug' in GCC

2008-02-05 Thread Anik Pal


-Original Message-
From: Anik Pal [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, February 05, 2008 8:17 PM
To: 'cygwin@cygwin.com'
Subject: RE: RE: undefined reference to `_msgDebug' in GCC 

 
 
-Original Message-
From: Anik Pal [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, February 05, 2008 8:17 PM
To: '[EMAIL PROTECTED]'
Subject: RE: RE: undefined reference to `_msgDebug' in GCC 
 
Phil,
Thanks for the info you provided. I’m not conversant with GCC.  
I remove the path for regular library like libm.a, and all the paths
specified in posix , now my linker option is as follows
 
-L/cygdrive/f/geolog6.6.1/lib -lcgg -llicence -llogs_dll -lPGILc_dll
-lPGILcTool_dll -lcgs  -lgeolog6 -L/cygdrive/D/cygwin/lib/mingw -lmsvcrt
-Bstatic -lm
But I’m not sure how to remove the dependency on libmsvcrt.a (that comes
with mingw lib in cygwin). What is the equivalent lib in cygwin/lib?
Moreover I followed the solution stated in the following url to get rid of
linking “undefined reference symbol __chkstk”
http://eegeerg.blogspot.com/2008_01_01_archive.html#4158852069709002699 
which actually states to copy chkstk.OBJ from MSVC/lib and rename to
chkstk.o and link with this.
Now linking error goes but when try to execute this exe, it doesn’t gives
any error message but terminate unexpectedly.
Regards
Anik Pal
India
From: Phil Betts Phil dot Betts at ascribe dot com 
• To: cygwin at cygwin dot com 
• Date: Mon, 4 Feb 2008 15:41:43 - 
• Subject: RE: undefined reference to `_msgDebug' in GCC 

Anik Pal wrote on Saturday, February 02, 2008 9:05 AM::
 
 I am trying to using a library in my code whose default compiler is
 MSVCRT. When I try to compile that code in cygwin GCC environment I
 get the following errors
 

F:/geolog6.6.1/lib/libgeolog6.a(fileprintf.o):C:/development/ptc:(.text+
0x9)
 undefined reference to `__chkstk'
[snip]
 more undefined references to `_msgDebug' follow
 
 Can anyone tell me which cygwin-mingw library to be added to get rid
 of this linking error?
 
 My make file linking option I'm providing as follows
 
 -LF:/geolog6.6.1/lib -lcgg -lgeolog6  -llicence -llogs_dll -lPGILc_dll
 -lPGILcTool_dll -lcgs -llmgr9a -LD:/cygwin/lib -lcygwin
 -LD:/cygwin/lib/mingw -lmsvcrt -Bstatic -LD:/cygwin/lib -lm
 
 
First, don't use windows pathnames.  Cygwin is a POSIX environment,
so use POSIX pathnames (I.e. /cygdrive/f/ instead of F:/)
 
Second, you're linking with cygwin AND msvcrt and potentially also
mixing cygwin and mingw libraries.  Don't do that.
The cygwin, msvcrt and mingw are fundamentally incompatible.  
[Although it is possible under very specific circumstances to mix
cygwin and msvcrt, it requires knowledge of the internals of both
libraries, and if you had that knowledge, you wouldn't have posted 
your question, so the advice stands]
 
Make your mind up whether you want to write a POSIX program or a
Windows program and stick to your decision.
 
Third, let the compiler choose the C runtime library.  You don't
specify -lcygwin, nor the path to the standard library locations,
so the only -L you need is -L/cygdrive/f/geolog6.6.1/lib
 
Fourth, libm is integral to cygwin1.dll, so you don't need -lm.
The math library supplied with cygwin is only a stub to support 
makefiles such as yours that assume it's necessary.
 
 
Anik Pal
Schlumberger, Vadodara, India
 


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



RE: RE: undefined reference to `_msgDebug' in GCC

2008-02-05 Thread Phil Betts
Anik Pal wrote on Tuesday, February 05, 2008 3:12 PM::

 Phil,
 Thanks for the info you provided. I'm not conversant with GCC.
 I remove the path for regular library like libm.a, and all the paths
 specified in posix , now my linker option is as follows
 
 -L/cygdrive/f/geolog6.6.1/lib -lcgg -llicence -llogs_dll -lPGILc_dll
 -lPGILcTool_dll -lcgs  -lgeolog6 -L/cygdrive/D/cygwin/lib/mingw
 -lmsvcrt 
 -Bstatic -lm

You've only done half of what I said.

You only need this:

-L/cygdrive/f/geolog6.6.1/lib -lcgg -llicence -llogs_dll \
-lPGILc_dll -lPGILcTool_dll -lcgs  -lgeolog6

Here's why:

-L/cygdrive/D/cygwin/lib/mingw = look in the mingw lib directory
when linking.  You don't want to do that if you're compiling a
cygwin program, because the mingw libraries expect the program 
to be linked with msvcrt (see below)

-lmsvcrt = link to the Microsoft Visual C Runtime library. You 
definitely don't want this if you're compiling a cygwin program.

-Bstatic -lm = link with the static math library.  As I 
previously explained, the math library is integral to the cygwin 
C runtime library, so you just don't need this.


You should never specify a C runtime library to the compiler 
because  the compiler is generating code for a specific runtime 
library and if you force the linker to link with a different one 
you are likely to get all sorts of linkage errors.

If the above options don't work, then it's likely that your code
(or one of the libraries in geolog6.6.1/lib has calls to native
Windows functions.  If this is the case, you have two options:

1) replace all Windows function calls with their POSIX equivalent.
This will make your code portable to many more platforms.

2) If this is not possible, compile a native Windows program. For 
this you can either use the mingw version of gcc (where you'll 
need to use DOS style paths), or you can use cygwin's gcc in 
cross-compilation mode by specifying the -mno-cygwin option to gcc.
Note that if you do this, you won't be able to link to any of the 
cygwin libraries.  You don't need to change the link options from
those given above - gcc will automatically link with the msvcrt.dll

If you do decide to compile a native windows application, any 
further questions would be off-topic for this list - the clue is in
the no-cygwin bit ;-)

 But I'm not sure how to remove the dependency on libmsvcrt.a (that
 comes with mingw lib in cygwin).

If you've followed the above, you should now be able to answer that
yourself.

 What is the equivalent lib in cygwin/lib? 

cygwin1.dll is cygwin's libc.  Just leave it up to the compiler 
to figure out which C library it needs to link to.
 
 Moreover I followed the solution stated in the following
 url to get rid of linking undefined reference symbol __chkstk
 http://eegeerg.blogspot.com/2008_01_01_archive.html#4158852069709002699
 which actually states to copy chkstk.OBJ from MSVC/lib and rename to
 chkstk.o and link with this.
 Now linking error goes but when try to execute this exe, it doesn't
 gives any error message but terminate unexpectedly.

That link says this:
| This is the error you get when you try to link a msvc6 compiled 
   ^
| library with gcc on mingw
   

If you try to mix MSVC code with cygwin code, you are asking for
trouble.  As I said in my original reply, decide whether you want
a cygwin program or a native Windows program and stick to your 
decision.

Phil

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