FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Linking problem symbol _d_arraycopy (Linux 32/64 bit)

 
Post new topic   Reply to topic     Forum Index -> gtkD
View previous topic :: View next topic  
Author Message
bleser



Joined: 21 Jun 2008
Posts: 3

PostPosted: Sun Mar 27, 2011 2:42 am    Post subject: Linking problem symbol _d_arraycopy (Linux 32/64 bit) Reply with quote

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
Back to top
View user's profile Send private message
Mike Wey



Joined: 07 May 2007
Posts: 428

PostPosted: Sun Mar 27, 2011 8:37 am    Post subject: Reply with quote

In the arguments passed to the linker -lgtango should appear after -lgtkd since ld doesn't search the libraries repeatedly by default.

also version PhobosCompatibility shouldn't be needed for gtkd.
Back to top
View user's profile Send private message
bleser



Joined: 21 Jun 2008
Posts: 3

PostPosted: Mon Mar 28, 2011 12:28 am    Post subject: Reply with quote

Mike Wey wrote:
In the arguments passed to the linker -lgtango should appear after -lgtkd since ld doesn't search the libraries repeatedly by default.

also version PhobosCompatibility shouldn't be needed for gtkd.


Super thank this just works Laughing
_________________
cbr
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic     Forum Index -> gtkD All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group