bleser
Joined: 21 Jun 2008 Posts: 3
|
Posted: Sun Mar 27, 2011 2:42 am Post subject: Linking problem symbol _d_arraycopy (Linux 32/64 bit) |
|
|
I just tried to link gtkD with tango.
I got a undefined symbol when I tried to compile and link the the TestWindow program.
I slightly modified the Makefile to fit my build base. (I have attached my make file)
flyvemaskine:~/src/work/dversion/gtkD> make -fMakefile DC=gdc ARCH=i386 | & tee make.dmp
gdc demos/gtkD/TestWindow/TEditableCells.o demos/gtkD/TestWindow/TestScales.o demos/gtkD/TestWindow/TestTreeView.o demos/gtkD/TestWindow/TestWindow.o demos/gtkD/TestWindow/TestIdle.o demos/gtkD/TestWindow/TestDrawingArea.o demos/gtkD/TestWindow/TTextView.o demos/gtkD/TestWindow/app.o demos/gtkD/TestWindow/TestImage.o demos/gtkD/TestWindow/TestText.o demos/gtkD/TestWindow/TestThemes.o demos/gtkD/TestWindow/TestStock.o demos/gtkD/TestWindow/TestTreeView1.o demos/gtkD/TestWindow/TestEntries.o demos/gtkD/TestWindow/TestAspectFrame.o -o TestWindow -m32 -L/home/cbr/src/work/dversion/lib32/ -lpthread -fversion=PhobosCompatibility -fversion=Tango -fversion=Posix -nophoboslib -lgtango -ldl -L. -lgtkd32
./libgtkd32.a(Str.o): In function `_D4glib3Str3Str8toStringFkZAa':
Str.d:(.text+0x4eb): undefined reference to `_d_arraycopy'
./libgtkd32.a(Str.o): In function `_D4glib3Str3Str8toStringFiZAa':
Str.d:(.text+0x6c7): undefined reference to `_d_arraycopy'
./libgtkd32.a(Str.o): In function `_D4glib3Str3Str8toStringFmZAa':
Str.d:(.text+0x989): undefined reference to `_d_arraycopy'
./libgtkd32.a(Str.o): In function `_D4glib3Str3Str9toStringzFAaZPa':
Str.d:(.text+0xada): undefined reference to `_d_arraycopy'
collect2: ld returned 1 exit status
make: *** [TestWindow] Error 1
So as you can see the linker can't find _d_arraycopy.
But I the symbol _d_arraycopy is in the libgtango.a file which I link to?
flyvemaskine:~/src/work/dversion/gtkD> nm -o /home/cbr/src/work/dversion/lib32/libgtango.a |grep _d_arraycopy
/home/cbr/src/work/dversion/lib32/libgtango.a:tango.core.rt.compiler.gdc.rt.arraycat.o:00000020 T _d_arraycopy
Dose any body know what I am missing.
# Tango and system information
flyvemaskine:~/src/work/dversion/tango> svn info
Path: .
URL: http://svn.dsource.org/projects/tango/trunk
Repository Root: http://svn.dsource.org/projects/tango
Repository UUID: 94d23b9d-ec12-0410-b399-9fdf8a1d4f26
Revision: 5607
Node Kind: directory
Schedule: normal
Last Changed Author: mwarning
Last Changed Rev: 5607
Last Changed Date: 2011-01-16 10:34:32 +0100 (Sun, 16 Jan 2011)
flyvemaskine:~/src/work/dversion/tango> uname -a
Linux flyvemaskine 2.6.35.4-laptop #2 SMP Tue Nov 23 07:13:01 CET 2010 x86_64 GNU/Linux
flyvemaskine:~/src/work/dversion/tango> lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 10.10
Release: 10.10
Codename: maverick
Code: |
# Sets the root of the project
ifndef REPOROOT
REPOROOT:=${shell bzr root}
endif
#makeAll.sh
SHELL=/bin/sh
prefix=/usr/local
OS=$(shell uname || uname -s)
ifndef ARCH
ARCH=$(shell arch || uname -m)
endif
# make gtkD libs and test
all: libs test
ifndef DC
ifneq ($(strip $(shell which dmd 2>/dev/null)),)
DC=dmd
else ifneq ($(strip $(shell which ldc 2>/dev/null)),)
DC=ldc
else
DC=gdc
endif
endif
ifeq ("$(DC)","dmd")
DFLAGS:=-O
output=-of$@
LIBRREFIX=libd
LDSWITCH=-L
else ifeq ("$(DC)","ldc")
DFLAGS:=-O
output=-of$@
LIBPREFIX=libl
else
DFLAGS:=-O2
output=-o $@
LIBPREFIX=libg
ifneq ("$(ARCH)","x86_64")
DFLAGS+=-m32
LDFLAGS+=-m32
LDFLAGS+=-L$(REPOROOT)/lib32/
LDFLAGS+=-lpthread
LIBSUFFIX=32
else
DFLAGS+=-m64
LDFLAGS+=-m64
LDFLAGS+=-L$(REPOROOT)/lib/
LDFLAGS+=-lpthread
LIBSUFFIX=64
endif
endif
# Added for tango
ifndef PHOBOSE
TANGO_DIR:=$(REPOROOT)/tango/
DFLAGS+=-I$(TANGO_DIR)
DFLAGS+=-nophoboslib
#DFLAGS+=-m32
DFLAGS+=-fversion=PhobosCompatibility
DFLAGS+=-fversion=Tango
DFLAGS+=-fversion=Posix
LDFLAGS+=-fversion=PhobosCompatibility
LDFLAGS+=-fversion=Tango
LDFLAGS+=-fversion=Posix
LDFLAGS+=-nophoboslib
LDFLAGS+=-lgtango
endif
ifeq ("$(OS)","Darwin")
LDFLAGS+=-Wl,-undefined,dynamic_lookup
else ifeq ("$(OS)","Linux")
LDFLAGS+=$(LDSWITCH)-ldl
endif
AR=ar
RANLIB=ranlib
define make-lib
$(AR) rcs $@ $^
$(RANLIB) $@
endef
#######################################################################
LIBNAME_GTKD = libgtkd$(LIBSUFFIX).a
SOURCES_GTKD = $(shell find \
src/atk \
src/cairo \
src/gdk \
src/gdkpixbuf \
src/gio \
src/glade \
src/glib \
src/gobject \
src/gthread \
src/gtk \
src/gtkc \
src/pango \
-name '*.d' )
OBJECTS_GTKD = $(shell echo $(SOURCES_GTKD) | sed -e 's/\.d/\.o/g')
LIBNAME_GTKDGL = libgtkdgl$(LIBSUFFIX).a
SOURCES_GTKDGL = $(shell find \
srcgl/glgdk \
srcgl/glgtk \
srcgl/gtkglc \
-name '*.d' )
OBJECTS_GTKDGL = $(shell echo $(SOURCES_GTKDGL) | sed -e 's/\.d/\.o/g')
LIBNAME_GTKDSV = libgtkdsv$(LIBSUFFIX).a
SOURCES_GTKDSV = $(shell find \
srcsv/gsv \
srcsv/gsvc \
-name '*.d' )
OBJECTS_GTKDSV = $(shell echo $(SOURCES_GTKDSV) | sed -e 's/\.d/\.o/g')
LIBNAME_GTKDGDA = libgtkdgda$(LIBSUFFIX).a
SOURCES_GTKDGDA = $(shell find \
srcgda/gda \
srcgda/gdac \
-name '*.d' )
OBJECTS_GTKDGDA = $(shell echo $(SOURCES_GTKDGDA) | sed -e 's/\.d/\.o/g')
LIBNAME_GSTREAMERD = libgstreamerd$(LIBSUFFIX).a
SOURCES_GSTREAMERD = $(shell find \
srcgstreamer/gstinterfaces \
srcgstreamer/gstreamer \
srcgstreamer/gstreamerc \
-name '*.d' )
OBJECTS_GSTREAMERD = $(shell echo $(SOURCES_GSTREAMERD) | sed -e 's/\.d/\.o/g')
#######################################################################
BINNAME_DEMO = TestWindow
SOURCES_DEMO = $(shell find \
demos/gtkD/TestWindow \
-name '*.d' )
OBJECTS_DEMO = $(shell echo $(SOURCES_DEMO) | sed -e 's/\.d/\.o/g')
# you can now run
#./GtkDTests
#./SimpleGL
#./ShapesGL
#######################################################################
# -Isrc
libs: gtkd gtkdgl sv
gtkd: $(LIBNAME_GTKD)
gtkdgl: $(LIBNAME_GTKDGL)
sv: $(LIBNAME_GTKDSV)
gda: $(LIBNAME_GTKDGDA)
gstreamer: $(LIBNAME_GSTREAMERD)
$(LIBNAME_GTKD): IMPORTS=-Isrc
$(LIBNAME_GTKD): $(OBJECTS_GTKD)
$(make-lib)
$(LIBNAME_GTKDGL): IMPORTS=-Isrc -Isrcgl
$(LIBNAME_GTKDGL): $(OBJECTS_GTKDGL)
$(make-lib)
$(LIBNAME_GTKDSV): IMPORTS=-Isrc -Isrcsv
$(LIBNAME_GTKDSV): $(OBJECTS_GTKDSV)
$(make-lib)
$(LIBNAME_GTKDGDA): IMPORTS=-Isrc -Isrcgda
$(LIBNAME_GTKDGDA): $(OBJECTS_GTKDGDA)
$(make-lib)
$(LIBNAME_GSTREAMERD): IMPORTS=-Isrc -Isrcgstreamer
$(LIBNAME_GSTREAMERD): $(OBJECTS_GSTREAMERD)
$(make-lib)
#######################################################################
# -Idemos
test: $(BINNAME_DEMO)
$(BINNAME_DEMO): IMPORTS=-Isrc -Idemos/gtkD/TestWindow
$(BINNAME_DEMO): $(OBJECTS_DEMO) $(LIBNAME_GTKD)
$(DC) $(OBJECTS_DEMO) $(output) $(LDFLAGS) $(LDSWITCH)-L. $(LDSWITCH)-lgtkd$(LIBSUFFIX)
#######################################################################
%.o : %.d
$(DC) $(DFLAGS) $(IMPORTS) -c $< $(output)
#######################################################################
install: libs
install -d $(DESTDIR)$(prefix)/include/d
(cd src; echo $(SOURCES_GTKD) | sed -e s,src/,,g | xargs tar c) | (cd $(DESTDIR)$(prefix)/include/d; tar xv)
(cd srcgl; echo $(SOURCES_GTKDGL) | sed -e s,srcgl/,,g | xargs tar c) | (cd $(DESTDIR)$(prefix)/include/d; tar xv)
(cd srcsv; echo $(SOURCES_GTKDSV) | sed -e s,srcsv/,,g | xargs tar c) | (cd $(DESTDIR)$(prefix)/include/d; tar xv)
install -d $(DESTDIR)$(prefix)/lib
install -m 644 $(LIBNAME_GTKD) $(DESTDIR)$(prefix)/lib
install -m 644 $(LIBNAME_GTKDGL) $(DESTDIR)$(prefix)/lib
install -m 644 $(LIBNAME_GTKDSV) $(DESTDIR)$(prefix)/lib
install-gda: install
(cd srcgda; echo $(SOURCES_GTKDGDA) | sed -e s,srcgda/,,g | xargs tar c) | (cd $(DESTDIR)$(prefix)/include/d; tar xv)
install -m 644 $(LIBNAME_GTKDGDA) $(DESTDIR)$(prefix)/lib
install-gstreamer: install
(cd srcgstreamer; echo $(SOURCES_GSTREAMERD) | sed -e s,srcgstreamer/,,g | xargs tar c) | (cd $(DESTDIR)$(prefix)/include/d; tar xv)
install -m 644 $(LIBNAME_GSTREAMERD) $(DESTDIR)$(prefix)/lib
uninstall:
$(foreach dir,$(shell ls src) , rm -rf $(DESTDIR)$(prefix)/include/d/$(dir))
$(foreach dir,$(shell ls srcgl), rm -rf $(DESTDIR)$(prefix)/include/d/$(dir))
$(foreach dir,$(shell ls srcsv), rm -rf $(DESTDIR)$(prefix)/include/d/$(dir))
rm -f $(DESTDIR)$(prefix)/lib/$(LIBNAME_GTKD)
rm -f $(DESTDIR)$(prefix)/lib/$(LIBNAME_GTKDGL)
rm -f $(DESTDIR)$(prefix)/lib/$(LIBNAME_GTKDSV)
uninstall-gda:
$(foreach dir,$(shell ls srcgda), rm -rf $(DESTDIR)$(prefix)/include/d/$(dir))
rm -f $(DESTDIR)$(prefix)/lib/$(LIBNAME_GTKDGDA)
uninstall-gstreamer:
$(foreach dir,$(shell ls srcgstreamer), rm -rf $(DESTDIR)$(prefix)/include/d/$(dir))
rm -f $(DESTDIR)$(prefix)/lib/$(LIBNAME_GSTREAMERD)
clean:
-rm -f $(LIBNAME_GTKD) $(OBJECTS_GTKD)
-rm -f $(LIBNAME_GTKDGL) $(OBJECTS_GTKDGL)
-rm -f $(LIBNAME_GTKDSV) $(OBJECTS_GTKDSV)
-rm -f $(LIBNAME_GTKDGDA) $(OBJECTS_GTKDGDA)
-rm -f $(LIBNAME_GSTREAMERD) $(OBJECTS_GSTREAMERD)
-rm -f $(BINNAME_DEMO) $(OBJECTS_DEMO)
|
_________________ cbr |
|