PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Linker Problem [Arts und Kde Anwendnug]



undefined
16-10-2004, 15:42
Ich habe etwas Verständnisprobleme beim ansprechen von der Klasse Arts::VideoPlayObject
Ich bekomme ständig Linker Fehler sehe jedoch nicht wo mein Problem liegt.


/bin/sh ../libtool --silent --mode=link --tag=CXX g++ -Wnon-virtual-dtor -Wno-long-long -Wundef -Wall -W -Wpointer-arith -Wwrite-strings -g3 -fno-inline -O0 -g3 -fno-exceptions -fno-check-new -fno-common -o kdvfirewire -R /opt/kde3/lib -R /usr/lib/qt3/lib -R /usr/X11R6/lib -L/usr/X11R6/lib -L/usr/lib/qt3/lib -L/opt/kde3/lib main.o kdvfirewire.o kdvfirewireview.o pref.o prefaudiooptions.o prefvideooptions.o prefprojectoptions.o kdvpanel.o kdvvideo.o kdvfirewireiface_skel.o prefaudiooptions.moc.o prefprojectoptions.moc.o prefvideooptions.moc.o -lkio -lkdeprint -lavc1394 -lrom1394 -ldv
kdvvideo.o(.gnu.linkonce.t._ZN4Arts15VideoPlayObje ctC1Ev+0xa): In function `Arts::VideoPlayObject::VideoPlayObject[in-charge]()':
/opt/kde3/include/arts/kmedia2.h:993: undefined reference to `Arts::VideoPlayObject::_Creator()'
collect2: ld returned 1 exit status


Ich habe schon ein Macro geschrieben was auch wunderbar funktioniert.



//MACRO
AC_DEFUN([KDVF_USED_ARTS],
[
KDE_SUBST_PROGRAMS(arts)
if test "$ARTSCCONFIG" != "no"; then
ARTS_CFLAGS=`$ARTSCCONFIG --cflags`
ARTS_LIBS=`$ARTSCCONFIG --libs`
ARTS=`$ARTSCCONFIG --arts-prefix`
AC_SUBST(ARTS_CFLAGS)
AC_SUBST(ARTS_LIBS)
AC_CHECK_HEADER($ARTS/include/artsc/artsc.h,
[ AC_DEFINE(HAVE_ARTS_VIDEO, 1,
[Define if you have the ARTS_VIDEO API])
])
KDE_CHECK_LIB([artsc], [main], [have_libartc=yes], [have_libartc=no])
if test "$have_libartc" != "no"; then
LIB_ARTS="-lartsc"
AC_SUBST(LIB_ARTS)
else
AC_MSG_ERROR([Could not find libartsc anywhere!])
fi
fi
])
KDVF_USED_ARTS


Jedoch brachte dies keine Änderung, habe ich eventuell ein ganz falschen Aufbau meiner Klassenstruktur?



//H
#ifndef KDVVIDEO_H
#define KDVVIDEO_H

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <klocale.h>
#include <qwidget.h>
#include <arts/artskde.h>
#include <arts/debug.h>
//#include <libdv/dv.h>

namespace Arts
{

class KDVVideo : public QWidget
{
Q_OBJECT
public:
KDVVideo( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
int videoBreit;
int videoHoch;
virtual ~KDVVideo();

private:
void init(void);
Arts::VideoPlayObject KDVXWidget;

};
};
#endif




//CPP
#include "kdvvideo.h"
#ifdef HAVE_X11_XLIB_H
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#endif

#include <kdebug.h>

namespace Arts
{

KDVVideo::KDVVideo(QWidget *parent, const char *name, WFlags f ) : QWidget( parent, name, f )
{
init();
}

void KDVVideo::init(void)
{
setMinimumSize( 0, 0 ); //QSize( 450, 350 )
setPaletteBackgroundColor( QColor( 35, 90, 35 ) );
setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
setFocusPolicy( ClickFocus );
Arts::Debug();
KDVXWidget = Arts::VideoPlayObject::null();
videoBreit = 0;
videoHoch = 0;
}

KDVVideo::~KDVVideo()
{}
}
;
#include "kdvvideo.moc"


danke für Tips und Anregungen
mfg undefined

anda_skoa
17-10-2004, 16:40
In der von dir geposteten Linkercommandline kommt irgendwie nichts mit "arts" vor.

Füg mal ein -lartskde hinzu, Pfad dafür brauchst du nicht extra, sollte immer dort sein, wo die KDE Libs sind.

Ciao,
_

undefined
21-10-2004, 11:04
Ich habe das flag nun mal in die Makefile.am gesetzt. un bekomme immernoch den Linker Fehler :confused:

/bin/sh ../libtool --silent --mode=link --tag=CXX g++ -Wnon-virtual-dtor -Wno-long-long -Wundef -Wall -W -Wpointer-arith -Wwrite-strings -g3 -fno-inline -O0 -g3 -fno-exceptions -fno-check-new -fno-common -o kdvfirewire -R /opt/kde3/lib -R /usr/lib/qt3/lib -R /usr/X11R6/lib -L/usr/X11R6/lib -L/usr/lib/qt3/lib -L/opt/kde3/lib -lartsc main.o kdvfirewire.o kdvfirewireview.o pref.o prefaudiooptions.o prefvideooptions.o prefprojectoptions.o kdvpanel.o kdvvideo.o kdvfirewireiface_skel.o prefaudiooptions.moc.o prefprojectoptions.moc.o prefvideooptions.moc.o -lkio -lkdeprint -ldc1394_control -lavc1394 -lrom1394 -ldv
kdvvideo.o(.gnu.linkonce.t._ZN4Arts15VideoPlayObje ctC1Ev+0xa): In function `Arts::VideoPlayObject::VideoPlayObject[in-charge]()':
/opt/kde3/include/arts/kmedia2.h:985: undefined reference to `Arts::VideoPlayObject::_Creator()'
collect2: ld returned 1 exit status

Sitz der Flag an der falschen stelle? müste doch eigentlich Global sein oder nicht?

in der kmedia2 verweist er auf diese Inline methode


/opt/kde3/include/arts/kmedia2.h:985: undefined reference to `Arts::VideoPlayObject::_Creator()'
/**
* kmedia2.h
*/
inline VideoPlayObject() : Arts::Object(_Creator), _cache(0) {}

anda_skoa
21-10-2004, 13:17
Tut mir leid, ich sehe da immer noch kein -lartskde, bestenfalls -lartsc
Dem Namen nach dürften das die C Bindings sein, von deinen anderen Dateinamen ausgehenend ist das aber eher eine KDE Applikation, sehr wahrscheinlich in C++

Ciao,
_

undefined
21-10-2004, 15:12
Jup stimmt Kde Projekt, Ich hatte die libartskde mit configure eingfügt


KDE_SET_PATHS
LIB_ARTSKDE=-lartskde
AC_SUBST(LIB_ARTSKDE)

Weil das jetzt nicht hingehauen hat hab ich sie jetzt ins Makefile gesetzt.


AM_LDFLAGS = -lartskde

Und jetzt wirds richtig blöd :(
Ich habe eine fehlerhafte Readline Bibliothek :(


/usr/lib/libreadline.so: undefined reference to `tgetnum'
/usr/lib/libreadline.so: undefined reference to `tgoto'
/usr/lib/libreadline.so: undefined reference to `tgetflag'
/usr/lib/libreadline.so: undefined reference to `BC'
/usr/lib/libreadline.so: undefined reference to `tputs'
/usr/lib/libreadline.so: undefined reference to `PC'
/usr/lib/libreadline.so: undefined reference to `tgetent'
/usr/lib/libreadline.so: undefined reference to `UP'
/usr/lib/libreadline.so: undefined reference to `tgetstr'
collect2: ld returned 1 exit status

Gibt es eine Möglichkeit das unterdrücken, ich bin Heute nicht scharf darauf meine halbes System upzudaten :rolleyes:
Oder muss ich --enable-debug=full abschalten ?
mfg undefined

undefined
21-10-2004, 16:57
Problem behoben, ich habe Readline neu Übersetz und einen linker auf termcap gesetzt, dieser hatte gefehlt.