There could well be 64-bit problems in the code, since it's a very old library that hasn't been maintained. But the problem you are seeing is not from that, it's from a very primitive and not very smart Makefile. The problem is with 64-bit code, in order to make a shared library you have to compile object files with -fPIC, whereas on 32-bit you didn't have to do that. Of course if you can convince cgui to produce a static library then you won't see this problem. I know the Makefile can produce a static build, but I'm not sure how to do that.
I have modified the makefile to work, though. I've attached it here as "makefile.uni." Drop it in the misc/ folder, do a make clean and try building it again.
Code: Select all
# makefile.uni:
# Makefile for the CGUI library with Unix. Should not be used directly!
#
# By Christer Sandberg (ported from ADIME made by Sven Sandberg)
#
# See readme.txt for more information about CGUI.
#
# See makefile.all for a list of the available targets.
# -------- Define some variables that the primary makefile may use. --------
PLATFORM = UNIX
EXE_SUFFIX =
OBJ_SUFFIX = .o
LIB_SUFFIX = .a
HTML_SUFFIX = .html
INFO_SUFFIX = .info
TEXI_SUFFIX = .texi
_TX_HTML_FLAG = -html
_TX_TEXI_FLAG = -texi
ifndef OBJ_ROOT_DIR
OBJ_ROOT_DIR = obj
endif
OBJ_PLATFORM_ROOT_DIR = $(OBJ_ROOT_DIR)/unix
ifndef LIB_ROOT_DIR
LIB_ROOT_DIR = lib
endif
LIB_DIR = $(LIB_ROOT_DIR)/unix
HAVE_TEXINFO = 1
ifdef STATICLINK
# link as a static library
OBJ_DIR = $(OBJ_PLATFORM_ROOT_DIR)/$(PACKAGE5)_s
IMPLIB_BASENAME = lib$(PACKAGE5)_s.a
IMPLIB_NAME = $(LIB_DIR)/$(IMPLIB_BASENAME)
LIB_NAME = $(IMPLIB_NAME)
else
# link as a shared object
OBJ_DIR = $(OBJ_PLATFORM_ROOT_DIR)/$(PACKAGE5)
IMPLIB_BASENAME = lib$(PACKAGE5).so
IMPLIB_NAME = $(LIB_DIR)/$(IMPLIB_BASENAME)
LIB_NAME = $(IMPLIB_NAME)
endif
# -------- Default system paths. ------------
ifndef SYSTEM_DIR
SYSTEM_DIR = /usr/local
endif
SYSTEM_INCLUDE_DIR = $(SYSTEM_DIR)/include
SYSTEM_LIB_DIR = $(SYSTEM_DIR)/lib
# -------- Set up mktext --------
ALLEGRO_DAT = $(ALLEGRO_DAT_X)
ALLEGRO_DAT2C = $(ALLEGRO_DAT2C_X)
CGUI_DAT2C = $(CGUI_DAT2C_X)
CGUI_FONTS = $(CGUI_FONTS_X)
CGUI_FONTS_C = $(CGUI_FONTS_C_X)
CGUI_FONTS_H = $(CGUI_FONTS_H_X)
CGUI_ICONS = $(CGUI_ICONS_X)
CGUI_ICONS_C = $(CGUI_ICONS_C_X)
CGUI_ICONS_H = $(CGUI_ICONS_H_X)
CGUI_CURSORS = $(CGUI_CURSORS_X)
CGUI_CURSORS_C = $(CGUI_CURSORS_C_X)
CGUI_CURSORS_H = $(CGUI_CURSORS_H_X)
CGUI_DAT = $(CGUI_DAT_X)
CGUI_DAT_C = $(CGUI_DAT_C_X)
CGUI_DAT_H = $(CGUI_DAT_H_X)
CGUI_LABELS = $(CGUI_LABELS_X)
TEXT_SOURCES = $(TEXT_SOURCES_X)
TEXT_HEADERS = $(TEXT_HEADERS_X)
MKTEXT = $(MKTEXT_X)
# -------- Give a sensible default target for make without any args. --------
# This must be done right after the tests, which can generate error targets.
.PHONY: _default
_default: default
# -------- Decide what compiler options and libraries to use. --------
ifdef WARNMODE
WFLAGS = -Wall -W
# -Wno-unused
else
WFLAGS = -Wall -Wno-unused
endif
ifdef PGCC
OFLAGS = -march=pentium -O6 -ffast-math
else
ifdef PENTIUMONLY
OFLAGS = -march=pentium -O2 -funroll-loops -ffast-math
else
OFLAGS = -O2 -funroll-loops -ffast-math -fPIC
endif
endif
ifdef STATICLINK_ALLEGRO
ALLEGRO_CONFIG_FLAGS = --static
else
ALLEGRO_CONFIG_FLAGS = --shared
endif
ifdef DEBUGMODE
# debugging build
CFLAGS = -DDEBUGMODE=$(DEBUGMODE) $(WFLAGS) -g
SFLAGS = -DDEBUGMODE=$(DEBUGMODE) $(WFLAGS)
LFLAGS += -g -lm
LIB_FLAGS = `allegro-config --libs release $(ALLEGRO_CONFIG_FLAGS)`
else
ifdef PROFILEMODE
# profiling build
CFLAGS = $(WFLAGS) $(OFLAGS) -pg
SFLAGS = $(WFLAGS)
LFLAGS += -pg
LIB_FLAGS = `allegro-config --libs profile $(ALLEGRO_CONFIG_FLAGS)`
else
# optimised build
CFLAGS = $(WFLAGS) $(OFLAGS) -fomit-frame-pointer -fno-strength-reduce
SFLAGS = $(WFLAGS)
ifndef SYMBOLMODE
LFLAGS += -s
LIB_FLAGS = `allegro-config --libs release $(ALLEGRO_CONFIG_FLAGS)`
endif
endif
endif
ifdef CGUI_DEVELOPING
CFLAGS += -D_CGUI_DEVELOPING=1
endif
ifdef CGUI_FORTIFY
CFLAGS += -D_CGUI_FORTIFY=1 -DFORTIFY
endif
ifdef EFENCE
LIB_FLAGS += -lefence
endif
CFLAGS_NO_OPTIMIZE = $(WFLAGS)
COMPILE_FLAGS = $(subst src/,-DCGUI_SRC ,$(findstring src/, $<))$(CFLAGS)
COMPILE_FLAGS_NO_OPTIMIZE = $(subst src/,-DCGUI_SRC ,$(findstring src/, $<))$(CFLAGS_NO_OPTIMIZE)
ifdef STATICLINK
COMPILE_FLAGS += -DCGUI_STATICLINK
endif
ifdef PROFILEMODE
LIB_FLAGS += -lgmon
endif
# -------- List platform specific objects and programs. --------
VPATH +=
OBJ_LIST = $(COMMON_OBJS)
# Insert names of targets to build platform specific programs here.
PROGRAMS =
# Insert targets to build platform specific programs here.
# myprogram: path/myprogram$(EXE_SUFFIX)
# -------- Define how to compile. --------
GCC2UNIX = -D__UNIX__ -UDJGPP
COMPILE_C_TO_OBJ_DEPS =
define COMPILE_C_TO_OBJ
gcc $(COMPILE_FLAGS) -I./include -o $@ -c $<
endef
define COMPILE_C_TO_OBJ_NO_OPTIMIZE
gcc $(COMPILE_FLAGS_NO_OPTIMIZE) -I./include -o $@ -c $<
endef
COMPILE_S_TO_OBJ_DEPS =
define COMPILE_S_TO_OBJ
gcc $(SFLAGS) -I./include -x assembler-with-cpp -o $@ -c $<
endef
ifdef STATICLINK
# link as a static library
LINK_OBJ_TO_LIB_DEPS =
define LINK_OBJ_TO_LIB
ar rs $(LIB_NAME) $(LIB_OBJS)
endef
LINK_OBJ_TO_EXE_DEPS =
define LINK_OBJ_TO_EXE
gcc $(LFLAGS) -o $@ $< $(IMPLIB_NAME) $(LIB_FLAGS)
endef
LINK_OBJ_TO_EXE_NOLIB_DEPS =
define LINK_OBJ_TO_EXE_NOLIB
gcc $(LFLAGS) -o $@ $<
endef
LINK_OBJ_TO_EXE_NOCGUILIB_DEPS =
define LINK_OBJ_TO_EXE_NOCGUILIB
gcc $(LFLAGS) -o $@ $< $(LIB_FLAGS)
endef
LINK_ALL_OBJ_TO_EXE_DEPS =
define LINK_ALL_OBJ_TO_EXE
gcc $(LFLAGS) -o $@ $^ $(IMPLIB_NAME) $(LIB_FLAGS)
endef
LINK_ALL_OBJ_TO_EXE_NOLIB_DEPS =
define LINK_ALL_OBJ_TO_EXE_NOLIB
gcc $(LFLAGS) -o $@ $^
endef
LINK_ALL_OBJ_TO_EXE_NOCGUILIB_DEPS =
define LINK_ALL_OBJ_TO_EXE_NOCGUILIB
gcc $(LFLAGS) -o $@ $^ $(LIB_FLAGS)
endef
else
# link as a shared object
LINK_OBJ_TO_LIB_DEPS =
define LINK_OBJ_TO_LIB
gcc $(LFLAGS) -shared -o $(IMPLIB_NAME) $(LIB_OBJS) $(LIB_FLAGS)
endef
LINK_OBJ_TO_EXE_DEPS =
define LINK_OBJ_TO_EXE
gcc $(LFLAGS) -o $@ $< -L$(LIB_DIR) -lcgui $(LIB_FLAGS) -lm
endef
LINK_OBJ_TO_EXE_NOLIB_DEPS =
define LINK_OBJ_TO_EXE_NOLIB
gcc $(LFLAGS) -o $@ $<
endef
LINK_OBJ_TO_EXE_NOCGUILIB_DEPS =
define LINK_OBJ_TO_EXE_NOCGUILIB
gcc $(LFLAGS) -o $@ $< $(LIB_FLAGS)
endef
LINK_ALL_OBJ_TO_EXE_DEPS =
define LINK_ALL_OBJ_TO_EXE
gcc $(LFLAGS) -o $@ $^ $(LIB_FLAGS) -L$(LIB_DIR) -lcgui
endef
LINK_ALL_OBJ_TO_EXE_NOLIB_DEPS =
define LINK_ALL_OBJ_TO_EXE_NOLIB
gcc $(LFLAGS) -o $@ $^
endef
LINK_ALL_OBJ_TO_EXE_NOCGUILIB_DEPS =
define LINK_ALL_OBJ_TO_EXE_NOCGUILIB
gcc $(LFLAGS) -o $@ $^ $(LIB_FLAGS)
endef
endif # ifdef STATICLINK
# -------- Rules for installing and removing the library files. --------
# If you don't have the install command, you may use cp and mkdir, but
# this will not set permissions.
$(SYSTEM_LIB_DIR)/$(IMPLIB_BASENAME): $(IMPLIB_NAME)
install -m 755 -d $(SYSTEM_LIB_DIR)
install -m 644 $< $@
$(SYSTEM_INCLUDE_DIR)/cgui.h: include/cgui.h
install -m 755 -d $(SYSTEM_INCLUDE_DIR)
install -m 644 $< $@
$(SYSTEM_INCLUDE_DIR)/cgui/%.h: include/cgui/%.h include/cgui
install -m 755 -d $(SYSTEM_INCLUDE_DIR)/cgui
install -m 644 $< $@
INSTALL_HEADERS = $(addprefix $(SYSTEM_DIR)/,$(wildcard include/cgui/*.h))
INSTALL_FILES = $(SYSTEM_LIB_DIR)/$(IMPLIB_BASENAME) \
$(SYSTEM_INCLUDE_DIR)/cgui.h \
$(INSTALL_HEADERS)
install: $(INSTALL_FILES)
@echo The $(DESCRIPTION) UNIX library has been installed.
UNINSTALL_FILES = $(SYSTEM_LIB_DIR)/libcgui.a $(SYSTEM_LIB_DIR)/libcgui_s.a $(SYSTEM_LIB_DIR)/libcguid.a $(SYSTEM_LIB_DIR)/libcguid_s.a \
$(SYSTEM_INCLUDE_DIR)/cgui.h
uninstall:
-rm -fv $(UNINSTALL_FILES)
-rm -fr $(SYSTEM_INCLUDE_DIR)/cgui
@echo All gone!
# -------- Compile anything that can't be done in makefile.all. --------
#examples/ex%: $(OBJ_DIR)/ex%$(OBJ_SUFFIX)
# $(LINK_OBJ_TO_EXE)
#NATIVE_LINK_OBJ_TO_EXE = 1
# -------- generate automatic dependencies --------
DEPEND_PARAMS = $(GCC2UNIX) -MM -MG -I./include -DCGUI_SCAN_DEPEND
depend:
gcc $(DEPEND_PARAMS) src/*.c examples/*.c > _depend.tmp
sed -e 's/^\([a-zA-Z0-9_]*\)\.o:/obj\/unix\/cgui\/\1\.o:/' _depend.tmp > obj/unix/cgui/makefile.dep
sed -e 's/^\([a-zA-Z0-9_]*\)\.o:/obj\/unix\/cguid\/\1\.o:/' _depend.tmp > obj/unix/cguid/makefile.dep
sed -e 's/^\([a-zA-Z0-9_]*\)\.o:/obj\/unix\/cgui_s\/\1\.o:/' _depend.tmp > obj/unix/cgui_s/makefile.dep
sed -e 's/^\([a-zA-Z0-9_]*\)\.o:/obj\/unix\/cguid_s\/\1\.o:/' _depend.tmp > obj/unix/cguid_s/makefile.dep
rm _depend.tmp