Subject: metis-edf: FTBFS - missing link at math
Package: metis-edf
Severity: normal
metis-edf fails to build on Ubuntu.
Bits from my pbuilder:
...
io.c: In function 'ReadMesh':
io.c:308:9: warning: 'esize' may be used uninitialized in this
function [-Wuninitialized]
gfortran -Wl,-Bsymbolic-functions -Wl,-z,relro -L. -L.. -o ../pmetis
pmetis.o io.o -L.. -lmetis-edf -lm
../libmetis-edf.so: undefined reference to `sqrtf'
../libmetis-edf.so: undefined reference to `log'
../libmetis-edf.so: undefined reference to `pow'
collect2: ld returned 1 exit status
make[2]: *** [../pmetis] Error 1
It seems that Makefile lacks math linking somewhere.
To fix problem, plase add '-lm' at "../libmetis-edf.so" in Libs/Makefile
- $(CC) $(LDFLAGS) -shared -o $@ $(OBJS) -Wl,-soname,libmetis-edf.so.4.1
+ $(CC) $(LDFLAGS) -shared -o $@ $(OBJS) -Wl,-soname,libmetis-edf.so.4.1 -lm
In attachment you can find a update version of Makefile.patch fixing this issue.
Thanks a lot!
Leo Iannacone.
-- System Information:
Debian Release: wheezy/sid
APT prefers oneiric-updates
APT policy: (500, 'oneiric-updates'), (500, 'oneiric'), (100,
'oneiric-backports')
Architecture: i386 (i686)
Kernel: Linux 3.0.0-13-generic (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
--- a/Makefile
+++ b/Makefile
@@ -5,29 +5,21 @@
SUBDIRS=Lib Programs
CONFDIR=./CONFIG
-default: Makefile.in onmetis.exe pmetis kmetis tests
+default: Makefile.in libs programs
-onmetis.exe: Makefile.in
- for d in $(SUBDIRS); do \
- (cd $$d && $(MAKE)); \
- done
-
-pmetis: Makefile.in
- for d in $(SUBDIRS); do \
- (cd $$d && $(MAKE)); \
- done
+libs: Makefile.in
+ (cd Lib && $(MAKE))
-kmetis: Makefile.in
+programs: Makefile.in
for d in $(SUBDIRS); do \
(cd $$d && $(MAKE)); \
done
-
tests:
cd Test ; make
-clean:
+clean: Makefile.in
for d in $(SUBDIRS) Test; do \
(cd $$d && $(MAKE) $@); \
done
@@ -42,5 +34,6 @@
# config : define variables depends on platform
# Linux, IRIX64, SunOS (SOLARIS/SOLARIS64), OSF1 (TRU64)
Makefile.in:
+ echo "Creating Makefile.in"
sh $(CONFDIR)/configure
--- a/Lib/Makefile
+++ b/Lib/Makefile
@@ -2,7 +2,6 @@
INCLUDES = -I.
-CFLAGS = $(COPTIONS) $(INCLUDES)
LD = $(CC) -L.
@@ -17,14 +16,23 @@
mrefine2.o minitpart2.o mbalance2.o mfm2.o \
kvmetis.o kwayvolrefine.o kwayvolfm.o subdomains.o
+all: ../libmetis-edf.a ../libmetis-edf.so
+
+
.c.o:
- $(CC) $(CFLAGS) -c $*.c
+ $(CC) $(COPTIONS) $(INCLUDES) -c $*.c
-../libmetis.a: $(OBJS)
+../libmetis-edf.a: $(OBJS)
$(AR) $@ $(OBJS)
+../libmetis-edf.so: $(OBJS)
+ $(CC) $(LDFLAGS) -shared -o $@ $(OBJS) -Wl,-soname,libmetis-edf.so.4.1 -lm
+ (cd .. && mv libmetis-edf.so libmetis-edf.so.4.1)
+ (cd .. && ln -s libmetis-edf.so.4.1 libmetis-edf.so.4)
+ (cd .. && ln -s libmetis-edf.so.4 libmetis-edf.so)
+
clean:
rm -f *.o
distclean:
- rm -f *.o ; rm -f ../libmetis.a
+ rm -f *.o ; rm -f ../libmetis.a ../libmetis.so*
--- a/Test/Makefile
+++ b/Test/Makefile
@@ -4,12 +4,12 @@
vers_check:
@echo "### Test 2 : test --version option, onmetis returns :"
- (../onmetis --version ; exit 0)
+ (export LD_LIBRARY_PATH=..; ../onmetis.exe --version ; exit 0)
@echo " "
fort.85 : fort.81
@echo "### Test 1 : data file produced by Code_Aster"
- ../onmetis fort.81
+ (export LD_LIBRARY_PATH=..; ../onmetis.exe fort.81; exit 0)
@echo " "
clean:
--- a/Programs/Makefile
+++ b/Programs/Makefile
@@ -3,10 +3,8 @@
BINDIR = ..
INCLUDES = -I../Lib
-CFLAGS = $(COPTIONS) $(INCLUDES)
-FFLAGS = $(FOPTIONS) $(INCLUDES)
-LIBS = -lmetis -lm
-METISLIB = ../libmetis.a
+LIBS = -L.. -lmetis-edf -lm
+METISLIB =
ONMETISOBJS = onmetis.o io_aster.o smbfactor.o ecri11.o lect11.o lect00.o
@@ -16,21 +14,21 @@
.c.o:
- $(CC) $(CFLAGS) -c $*.c
+ $(CC) $(COPTIONS) $(INCLUDES) -c $*.c
default: $(BINDIR)/onmetis.exe $(BINDIR)/pmetis $(BINDIR)/kmetis
-$(BINDIR)/onmetis.exe: $(ONMETISOBJS) $(METISLIB)
+$(BINDIR)/onmetis.exe: $(ONMETISOBJS)
$(LD) $(LDOPTIONS) -o $@ $(ONMETISOBJS) $(LIBS)
chmod 755 $@
-$(BINDIR)/pmetis: $(PMETISOBJS) $(METISLIB)
+$(BINDIR)/pmetis: $(PMETISOBJS)
$(LD) $(LDOPTIONS) -o $@ $(PMETISOBJS) $(LIBS)
chmod 755 $@
-$(BINDIR)/kmetis: $(KMETISOBJS) $(METISLIB)
+$(BINDIR)/kmetis: $(KMETISOBJS)
$(LD) $(LDOPTIONS) -o $@ $(KMETISOBJS) $(LIBS)
chmod 755 $@
@@ -38,11 +36,11 @@
clean:
rm -f *.o
ecri11.o:ecri11.f
- $(F90) $(FFLAGS) -c ecri11.f
+ $(F90) $(FOPTIONS) $(INCLUDES) -c ecri11.f
lect11.o:lect11.f
- $(F90) $(FFLAGS) -c lect11.f
+ $(F90) $(FOPTIONS) $(INCLUDES) -c lect11.f
lect00.o:lect00.f
- $(F90) $(FFLAGS) -c lect00.f
+ $(F90) $(FOPTIONS) $(INCLUDES) -c lect00.f
distclean:
rm -f *.o ;\
rm -f $(BINDIR)/onmetis.exe ;