Page 1 of 1

Compiling for Unix

PostPosted: 08 May 2007, 20:20
by Pradu
Hi all. Let me let you know that I'm not at all experienced with making Unix compiles. For Buzz I've been making "Unix" compiles on Ubuntu. For some reason this compile will not work on someone else's computer which runs under Suse; but when a compile was made on the Suse computer, it ran fine. This is the makefile I use to compile Buzz under Unix:
Code: Select all
#Makefile for Buzz
CC = gcc
LD = gcc
CFLAGS = -g -x c -std=c99 -DNDEBUG -D_POSIX -O3 -w
LDFLAGS = -s -pthread
RM = /bin/rm -f
OBJS = bitinstructions.o board.o book.o consolecolors.o eval.o hash.o log.o magicmoves.o main.o movegen.o moveordering.o mt19937-64.o recog.o search.o thread.o timemanager.o xboard.o
PROG = Buzz

$(PROG): $(OBJS)
   $(LD) $(LDFLAGS) $(OBJS) -o $(PROG)

%.o: %.c
   $(CC) $(CFLAGS) -c $<

clean:
   -rm *.o *~

Does anyone know why an Ubuntu compile won't work on Suse? Also is it possible to make a generic "UNIX" compile that will work on MacOS, Linux, Solaris, ect. as long as they all run on the same processor?

Re: Compiling for Unix

PostPosted: 08 May 2007, 22:25
by Sven Schüle
Hi Pradu,

there are many possible reasons including different installed versions of glibc or pthread library, or similar things. Also using -g and -O3 together might produce surprising results. Maybe -O3 optimizes in a machine-specific way?

Posting error messages you get might be helpful.

Which Ubuntu and Suse versions are involved?

On your last question: no, a "generic UNIX compile" which runs on completely different UNIX systems is not possible in general. Executables have different formats on the various UNIX systems, and there may also be many other reasons, e.g. availability of system libraries.

Sven

Re: Compiling for Unix

PostPosted: 08 May 2007, 23:27
by Pradu
Sven Schüle wrote:Hi Pradu,

there are many possible reasons including different installed versions of glibc or pthread library, or similar things. Also using -g and -O3 together might produce surprising results. Maybe -O3 optimizes in a machine-specific way?

Is there anyway to dynamically link to these standard libraries? Oh and I just want to compile for x86 and x86_64 platforms that support SSE1,2,3 and MMX so I'm assuming that the same platform is used and that O3 won't optimize differently for different OS. Here's a link to Buzz sources with makefile if it helps to find out what goes wrong. I think POSIX thread support should be available on all popular UNIX OSs today but perhaps different versions supported could cause problems I guess?

Posting error messages you get might be helpful.
Memory Access Error for Ubuntu compile on Suse.

Which Ubuntu and Suse versions are involved?

SuSE 10.2
Ubuntu 7.04

On your last question: no, a "generic UNIX compile" which runs on completely different UNIX systems is not possible in general. Executables have different formats on the various UNIX systems, and there may also be many other reasons, e.g. availability of system libraries.

Sven

Ah that blows :\. So I suppose I must make various compiles for the various UNIX OS's. Are you aware if GCC can cross-compile for different OSs? I have so far only found cross-compilation options for different types of processors.

Re: Compiling for Unix

PostPosted: 09 May 2007, 00:55
by Bryan Hofmann
Pradu wrote:Hi all. Let me let you know that I'm not at all experienced with making Unix compiles. For Buzz I've been making "Unix" compiles on Ubuntu. For some reason this compile will not work on someone else's computer which runs under Suse; but when a compile was made on the Suse computer, it ran fine. This is the makefile I use to compile Buzz under Unix:
Code: Select all
#Makefile for Buzz
CC = gcc
LD = gcc
CFLAGS = -g -x c -std=c99 -DNDEBUG -D_POSIX -O3 -w
LDFLAGS = -s -pthread
RM = /bin/rm -f
OBJS = bitinstructions.o board.o book.o consolecolors.o eval.o hash.o log.o magicmoves.o main.o movegen.o moveordering.o mt19937-64.o recog.o search.o thread.o timemanager.o xboard.o
PROG = Buzz

$(PROG): $(OBJS)
   $(LD) $(LDFLAGS) $(OBJS) -o $(PROG)

%.o: %.c
   $(CC) $(CFLAGS) -c $<

clean:
   -rm *.o *~

Does anyone know why an Ubuntu compile won't work on Suse? Also is it possible to make a generic "UNIX" compile that will work on MacOS, Linux, Solaris, ect. as long as they all run on the same processor?


You will need to add -static to your CFLAGS so it will statically link the LIBS as different flavors of Linux use different versions of of the LIBs.


Bryan