I'm trying to see if I can compile the plasma physics code xoopic (the 
non-commericial verion) on my personal laptop using cygwin-x. They have their 
own library of graphing routines called xgrafix which uses xwindows. In their 
pub directory they also have tar files that are just xgrafics distributions 
with test code. I do scientific programming on unix systems for a living, so I 
figured that if I could get xgrafix to compile and execute its test programs on 
cygwin-x, then, I should be able get the full xoopic distribution to compile, 
perhaps with a little extra work. 
I ran the default unix configuration file just to see what it needs.  The only 
show stoppers were that it was looking for libX11.a, libXpm.a, libtcl.8.4.a and 
libtk.8.4.a.  The last two it pieced together from info in their respective 
confxxx.sh scripts.   I quickly located the corresponding import libs for the 
standard cygwin-x system (I'm fine with the standard dynamic linking, this is 
for my personal use recompiling a static distribution is just too much like 
work for my purposes).  
I believe the correct import libs for me would be:  libX11.dll.a, libXpm.dll.a, 
libtcl84.dll.a and libtk84.dll.a.  I seem to recall a couple of other libraries 
that started with libtcl and libtk so correct me if I'm wrong.  When I just 
stuck in the absolute path name variables to those import libs in the configure 
file, which overrides the tests, it found the import libs and made 
Makefiles that actually compiled, including the test.c program. Note that I 
checked the Makefiles and they had the right "-l" switches for everything.  
(The fortran test didn't compile but I can beat that into submission by myself, 
later.)  But the c test hangs when it runs, probably because the 
resulting Makefile didn't link think the libraries correctly.  I tried a couple 
of variations editing the Makefiles, even using the actuall DLL.s as the 
libraries but get the same result.
I've gotten spoiled by having a support person for scripts and makefiles and 
the like for the last several years and we don't generally use gnu compilers 
anyway so I'm not sure of the best way to proceed at this point. So here are my 
questions:
Question 1.) Currently it is building static archive - xgrafix.a. Since I'm 
building a graphics library that links to the X11, Xpm, Tcl and Tk DLLs, do I 
need to compile it (xgraphics) as a DLL?  It might work either way but I'm fine 
with whatever works best. To wit, I found the following useful entry in the 
cygwin user's guide under "Building and Using DLLs.
-------------------------------------------------------------------------------------------------------------------------------------------------------
However, if you are building a dll as an export library, you will probably want 
to use the complete syntax:
gcc -shared -o cyg${module}.dll \
    -Wl,--out-implib=lib${module}.dll.a \
    -Wl,--export-all-symbols \
    -Wl,--enable-auto-import \
    -Wl,--whole-archive ${old_libs} \
    -Wl,--no-whole-archive ${dependency_libs}
The name of your library is ${module}, prefixed with cyg for the DLL and lib 
for the import library. Cygwin DLLs use the cyg prefix to differentiate them 
from native-Windows MinGW DLLs, see the MinGW website for more details. 
${old_libs} are all your object files, bundled together in static libs or 
single object files and the ${dependency_libs} are import libs you need to link 
against, e.g '-lpng -lz -L/usr/local/special -lmyspeciallib'. 
---------------------------------------------------------------------------------------------------------------------------------------------------------
If I make it xgrafix.dll, I'll probably use this as a template so I get the 
import lib without having to run dlltool. But I find this a useful summary 
whether I make it a DLL or not.
Question 2..) Whether I build xgrafix as a DLL or not,  do I just need the 
import libs to compile (aside from the real library paths)?  That is, would I 
need to specify the actuall DLLs as well somewhere, like in "old_libs" above or 
in an absolute path name, to link the xwindows, tcl and tk DLLs I need? Or do I 
even need the import libs - would just the corresponding "-l" switches suffice?
 
Question 3.) Since I'm considering using the above command as a template, I'm 
thinking I can just use the object files I can already make in the top-level 
(xgraphics routines) directory to make a DLL with the right switches.  Is that 
right?  What I'm assuming is that those object files don't know whether they're 
supposed to be linked to a DLL or staic lib, so I can just link them from the 
command line to make a DLL.  Please correct me if I'm wrong.
Question 4.) This is sort of a repeat of question 2, probably.  When I make the 
test.c exectuable, do I need to specify anything (xgraphix specific) other than 
xgrafix.dll.a (along with its path)?
Sorry if these seem really basic to cygwin-x programmers out there but the 
documentation is a bit spotty on these linking issues.  I'd appreciate a little 
brief explaination of these issues.
Thank you,
-Mike Rogers




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

Reply via email to