This is the mail archive of the cygwin@cygwin.com 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]

Re: how to compile programs using (n)curses


"Charles S. Wilson" <cwilson@ece.gatech.edu> writes:

> Felix Natter wrote:
> > 
> > hi,
> > 
> > when I try to compile a simple (n)curses program using cygwin,
> > I get lots of "undefined reference"-messages, one for each ncurses function,
> > but with a "impl_" prepended (i.e. impl_waddch).
> 
> You probably mean "_imp_" is prepended.  The problem is a mismatch
> between your compilation command and your link command.  Apparently, you
> did this:
> 
> (compile): gcc -c foo.c -o foo.o
> and one of the following:
> (link   ): gcc -static -o foo.exe foo.o -lncurses
> (link   ): gcc -o foo.exe foo.o /usr/lib/libncurses.a
> 
> That is, you compiled with the default flags, which set things up for
> dll linking, but then explicitly linked to the static library (by
> specifying -static, or listing the static lib on the command line
> directly).
> 
> If you want static linking, then you must compile all your object files
> with the -DNCURSES_STATIC flag:
> (compile): gcc -DNCURSES_STATIC -c foo.c -o foo.o
> then link as above.
> 
> If you want dynamic linking, then compile normally (no _STATIC flags)
> but link as follows:
> (link   ): gcc -o foo.exe foo.o -lncurses (no -static flag, or)
> (link   ): gcc -o foo.exe foo.o /usr/lib/libncurses.dll.a
> 
> You will probably find /usr/doc/Cygwin/ncurses-5.2.README of interest,
> as well as the cygwin-announce messages referenced in that README.

I read this, thanks.
But I compiled as you suggest. In fact, the problem also occurs if I
compile and link in one step:
I saved the following as test_curses.c:
#include <curses.h>

int main(int argc, char** argv)
{
	initscr();
	wclear(stdscr);
	waddstr(stdscr, "hello world");
	wrefresh(stdscr);
	getch();
	endwin();
}

gcc -static -DNCURSES_STATIC -o test_curses.exe test_curses
=> undefined reference to endwin ...
gcc -o test_curses.exe test_curses.c
=> undefined reference to _imp__endwin ...

I looks like I have a broken installation. In fact, I installed very
"unconventionally": I downloaded setup.exe, and ran it using wine on
a linux-system (I had to because my windows95-partition is not currently
connected to the internet). After some time, my internet-connection
broke down. I copied the latest/-directory to my win95-partition,
and downloaded the remaining packages. Then I started win95 and run
setup.exe with the option "install from local directory".
here are the packages I installed:

ash	  bison  crypt	  file	     gcc    gzip       make	  tar
autoconf  byacc  cygwin   fileutils  gdb    inetutils  ncurses	  vim
automake  bzip2  dejagnu  findutils  gperf  less       sed	  w32api
bash	  clear  diff	  flex	     grep   login      setup.exe
binutils  cpio	 expect   gawk	     groff  m4	       sh-utils

BTW: in my case, setup.exe downloaded the src-package for each package 
selected. how can you disable this ?

thanks,

-- 
Felix Natter

--
Want to unsubscribe from this list?
Check out: http://cygwin.com/ml/#unsubscribe-simple


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