Re: Bug#191033: hugs98_98.200211-1(unstable/ia64): FTBFS: undefined reference to `main'

Ross Paterson <[email protected]>
Newsgroups gmane.comp.lang.haskell.hugs.bugs
Message-ID <[email protected]>
On Fri, May 02, 2003 at 03:46:32PM -0400, Isaac Jones wrote:
> The Debian autobuilders were unable to build hugs on a few platforms,
> and I tried building Hugs from the distribution tarball and got
> similar results on ia64 (on both Debian and Redhat).  Here's what
> information I have.  Please let me know if I can get more information
> for you.
> 
> [...]
> 
> This is what looks like the relevant configure output on ia64:
> checking if '/LD' builds loadable libraries... 
> checking if '/LD /ML /nologo' builds loadable libraries... 
> checking if '-shared' builds loadable libraries... 
> checking if '-bundle' builds loadable libraries... 
> checking if '-bundle -lc' builds loadable libraries... 
> checking if '-r' builds loadable libraries... 
> 
> And the same configure output on i386:
> checking if '/LD' builds loadable libraries...
> checking if '/LD /ML /nologo' builds loadable libraries...
> checking if '-shared' builds loadable libraries... -shared
> checking if '-bundle' builds loadable libraries... (cached) -shared
> checking if '-bundle -lc' builds loadable libraries... (cached) -shared
> checking if '-r' builds loadable libraries... (cached) -shared

Yes, the test HUGS_TRY_DYNLINK("-shared") is failing.

Please try running the attached script, which is the test this is using.

> However, when I alter config.h by hand to include the -shared flag,
> and rerun make;make install (without rerunning configure) I get this
> output:
> 
> [...]
> ERROR "/house/ijones/tmp//lib/hugs/libraries/Foreign/C/TypesISO.hs":41 - Implementation of .&. requires extra context
> *** Expected type   : Bits CPtrdiff => CPtrdiff -> CPtrdiff -> CPtrdiff
> *** Missing context : Bits Int64

You can work around this one by adding an empty Bits instance

instance Bits Int64

to libraries/Hugs/Int.hs -- it shouldn't be needed, but a future release
will have a real instance.  While you're at it, might as well add

instance Bits Word64

to libraries/Hugs/Word.hs just in case.
------------------------ test script ------------------------------
cat >conftest_dl.c <<EOF
int x = 0;    /* global */
int y;        /* common */
static int z; /* static */
static int test2() { return (test() + x + y + z); }
int test() { return test2(); }
EOF

cat >conftest.c <<EOF
#define SYMBOL1 "test"
#define SYMBOL2 "_test"

#define CANTRUN  1
#define CANTOPEN 2
#define SYM1_OK  3
#define SYM2_OK  4
#define CANTFIND 5

#include <stdio.h>
#include <dlfcn.h>

main()
{
	void *instance;
	void *sym;

	instance = dlopen("./conftest_dl.so",1);
	if (instance==0) exit(CANTOPEN);

	sym = dlsym(instance,SYMBOL1);
	if (sym != 0) exit(SYM1_OK);

	sym = dlsym(instance,SYMBOL2);
	if (sym != 0) exit(SYM2_OK);

	exit(CANTFIND);
}
EOF

gcc -shared conftest_dl.c -o conftest_dl.so
gcc conftest.c -ldl
./a.out
echo $?
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.