Russian Qt Forum

Программирование => С/C++ => Тема начата: voipp от Ноябрь 03, 2009, 19:20



Название: undefined reference(((
Отправлено: voipp от Ноябрь 03, 2009, 19:20
Имееются класс MainWindow и библиотека matrix.QT во всех строчках конструктора MainWindow где исопльзуется библиотека matrix находит ошибку undefined reference.
Так же он умудрился найти ошибки и в коде саомй библиотеке!(Х)_(Х)
а в самом конце вес это добавляет ошибкой collect2 выполнение  id завершилось с кодом возврата 1.Что за collect2, что он коллекционирует!
mainwindow.cpp
Код:

#include "mainwindow.h"
#include <MATRIX/matrix.h>


MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
prevPoint.setSize(4);
center.setSize(4);
currPoint.setSize(4);
m.mObject[0][0]=50;
m.mObject[0][1]=50;
m.mObject[1][0]=100;
m.mObject[1][1]=50;
m.mObject[2][0]=100;
m.mObject[2][1]=10;
m.mObject[3][0]=50;
m.mObject[3][1]=10;
m.mObject[0][3]=1;
m.mObject[1][3]=1;
m.mObject[2][3]=1;
m.mObject[3][3]=1;
center[0]=75;
center[1]=30;
center[2]=0;
center[3]=1;
m.Init_mchangecoord(400);
QPointF point(1,1);
currPoint=m.Change_coord(point);

}
//...........
mainwindow.h
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <MATRIX/matrix.h>
#include <QtGui>

class MainWindow : public QWidget
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    Main_matrix_class m;
    CVector center;
    CVector prevPoint, currPoint;
    void paintEvent(QPaintEvent*);
    void mousePressEvent(QMouseEvent* mouse);
    void mouseReleaseEvent(QMouseEvent* mouse);
    void mouseMoveEvent(QMouseEvent* mouse);

};

#endif // MAINWINDOW_H
matrix.h
Код:
// Библиотека matrix очень большая - вот ее фрагмент
//..
class CRow {
  protected:
    unsigned size;    // кол-во элементов
    tableitem *items; // массив элементов
  public:
  // конструктор по умолчанию
    CRow();
  // конструктор копирования
    CRow(const CRow& r);
  // конструктор с заданным размером
    CRow(unsigned uSize);
  // деструктор
    ~CRow();
  // обнуление всех элементов
    void zero_items();
  // кол-во элементов
    unsigned getSize() const { return size; }
  // изменение размера столбца, старые значения сохр, новые = 0
    CRow& setSize(unsigned uSize);
  // оператор [], индекс от нуля
    tableitem& operator [](unsigned uIndex);
    const tableitem& operator [](unsigned uIndex) const;
  // оператор вывода
   //friend ostream& operator << (ostream& s, CRow& r);
  // оператор ввода
   //friend istream& operator >> (istream& s, CRow& r);
  // оператор присваивания
    CRow& operator = (const CRow& r);[move]<---И здесь компилятор находит ошибку undefined reference[/move]
  };
/...
matrix.cpp
Код:
//.....
CRow& CRow::operator = (const CRow& r) {
  setSize(r.size);
  for (unsigned x = 0; x < size; x++)
    items[x] = r.items[x];
  return *this;
};
//....


Название: Re: undefined reference(((
Отправлено: Alex Custov от Ноябрь 03, 2009, 19:48
библитека не прилинкована к основной программе, отсюда и undefined reference. Выложи код библиотеки Matrix, сначала надо разобраться с ней, потом с основной программой.


Название: Re: undefined reference(((
Отправлено: voipp от Ноябрь 03, 2009, 20:05
слишком уж она большая - http ://ifolder.ru/14822575
PS я работаю на Linux Mint 7


Название: Re: undefined reference(((
Отправлено: Alex Custov от Ноябрь 03, 2009, 21:05
ошибки:
1) iostream.h - устарело, STL загловки подключай без расширения ".h"
2) имена STL классов использются без указания видимости "std::", и "using namespace std;" тоже нигде нет

предупреждения:
3) строки 80, 290 в matrix.cpp:
Код:
s.right
- пустое выражение, видимо подразумевалось что-то другое
4) строка 585 в matrix.cpp: - пустое тело в if(), видимо подразумевалось что-то другое
 
После правок библиотека откомпилировалась стандартно:

Код
Bash
$ qmake -project
$ правим "TEMPLATE=lib" в .pro
$ qmake
$ make
 

P.S. Debian Lenny, g++ 4.3.2, Qt 4.5.2


Название: Re: undefined reference(((
Отправлено: voipp от Ноябрь 03, 2009, 21:51
я ее в проект не добавлял а надо?Может из-за этого библиотека не скомпилилась и компоновщик не нашел ее объектный файл?Я просто не знаю как создавать такого рода вещи.


Название: Re: undefined reference(((
Отправлено: Alex Custov от Ноябрь 03, 2009, 22:54
естественно надо. Или вкомпиливать прямо в основной проект (поменять .pro файл!), или компилить matrix как отдельный проект и подключать в основной через LIBS += и INCLUDEPATH +=. Самое быстрое решение - первое.


Название: Re: undefined reference(((
Отправлено: voipp от Ноябрь 04, 2009, 15:46
а как поменять тогда .pro file не подскажите?


Название: Re: undefined reference(((
Отправлено: Alex Custov от Ноябрь 04, 2009, 15:49
а как поменять тогда .pro file не подскажите?

В SOURCES добавить matrix.cpp, в HEADERS - matrix.h.


Название: Re: undefined reference(((
Отправлено: voipp от Ноябрь 04, 2009, 17:54
Exited with code 2.
Error while building project Event_with_mouse
When executing build step 'Make'


Название: Re: undefined reference(((
Отправлено: Alex Custov от Ноябрь 04, 2009, 18:28
Exited with code 2.
Error while building project Event_with_mouse
When executing build step 'Make'

Полный лог ошибок дай, в конце-то концов...


Название: Re: undefined reference(((
Отправлено: voipp от Ноябрь 04, 2009, 18:59
извиняюсь что не догадался сразу(
Код:
Running build steps for project Event_with_mouse...
Configuration unchanged, skipping QMake step.
Starting: /usr/bin/make -w
make: Вход в каталог `/home/voipp/QTPROGRAMMS/Event_with_mouse'
make: *** Нет правила для сборки цели `matrix.cpp', требуемой для `matrix.o'. Останов.
make: Выход из каталога `/home/voipp/QTPROGRAMMS/Event_with_mouse'
Exited with code 2.
Error while building project Event_with_mouse
When executing build step 'Make'


Название: Re: undefined reference(((
Отправлено: voipp от Ноябрь 04, 2009, 19:05
вот какой .pro file -
Код:
TARGET = Event_with_mouse
TEMPLATE = app
SOURCES += main.cpp \
    mainwindow.cpp
SOURCES += matrix.cpp

HEADERS += mainwindow.h
HEADERS += matrix.h
а вот makefile(неполностью) -
Код:
ЗЫ библиотека находится по адресу /home/voipp/qtsdk(каккие-то номера)/qt/include/MATRIX
main.o: main.cpp mainwindow.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp

mainwindow.o: mainwindow.cpp mainwindow.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp

matrix.o: matrix.cpp matrix.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o matrix.o matrix.cpp

moc_mainwindow.o: moc_mainwindow.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp


Название: Re: undefined reference(((
Отправлено: Alex Custov от Ноябрь 04, 2009, 19:07
вот какой .pro file -

такое иногда случается, полностью пересобери проект- "rm -f Makefile && qmake && make clean && make"


Название: Re: undefined reference(((
Отправлено: voipp от Ноябрь 04, 2009, 19:15
Код:
WARNING: Failure to find: matrix.cpp
WARNING: Failure to find: matrix.h
rm -f moc_mainwindow.cpp
rm -f main.o mainwindow.o matrix.o moc_mainwindow.o
rm -f *~ core *.core
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o main.o main.cpp
In file included from main.cpp:2:
mainwindow.h:3:27: error: MATRIX/matrix.h: No such file or directory
In file included from main.cpp:2:
mainwindow.h:13: ошибка: ‘Main_matrix_class’ не является именем типа
mainwindow.h:14: ошибка: ‘CVector’ не является именем типа
mainwindow.h:15: ошибка: ‘CVector’ не является именем типа
make: *** [main.o] Ошибка 1
И еще вот что - matrix.cpp может нужно хранить не в папке matrix а в /usr/src ?


Название: Re: undefined reference(((
Отправлено: Alex Custov от Ноябрь 04, 2009, 19:19
Код:
WARNING: Failure to find: matrix.cpp
WARNING: Failure to find: matrix.h
И еще вот что - matrix.cpp может нужно хранить не в папке matrix а в /usr/src ?

Эти файлы нужно хранить в каталоге с проектом, а их там нет, о чём qmake и сказал.


Название: Re: undefined reference(((
Отправлено: voipp от Ноябрь 04, 2009, 19:22
но я ведь при компиляции указываю опцию поиска в каталогах для описания заголовков! Почему же он не может найти их в папке include/MATRIX


Название: Re: undefined reference(((
Отправлено: voipp от Ноябрь 04, 2009, 19:48
вот кстати файл makefile -
Код:
#############################################################################
# Makefile for building: Event_with_mouse
# Generated by qmake (2.01a) (Qt 4.5.0) on: ?? ????. 4 19:12:33 2009
# Project:  Event_with_mouse.pro
# Template: app
# Command: /usr/bin/qmake -unix -o Makefile Event_with_mouse.pro
#############################################################################

####### Compiler, tools and options

CC            = gcc
CXX           = g++
DEFINES       = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
CFLAGS        = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
CXXFLAGS      = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
INCPATH       = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I.
LINK          = g++
LFLAGS        = -Wl,-O1
LIBS          = $(SUBLIBS)  -L/usr/lib -lQtGui -lQtCore -lpthread
AR            = ar cqs
RANLIB        =
QMAKE         = /usr/bin/qmake
TAR           = tar -cf
COMPRESS      = gzip -9f
COPY          = cp -f
SED           = sed
COPY_FILE     = $(COPY)
COPY_DIR      = $(COPY) -r
INSTALL_FILE  = install -m 644 -p
INSTALL_DIR   = $(COPY_DIR)
INSTALL_PROGRAM = install -m 755 -p
DEL_FILE      = rm -f
SYMLINK       = ln -sf
DEL_DIR       = rmdir
MOVE          = mv -f
CHK_DIR_EXISTS= test -d
MKDIR         = mkdir -p

####### Output directory

OBJECTS_DIR   = ./

####### Files

SOURCES       = main.cpp \
mainwindow.cpp \
matrix.cpp moc_mainwindow.cpp
OBJECTS       = main.o \
mainwindow.o \
matrix.o \
moc_mainwindow.o
DIST          = /usr/share/qt4/mkspecs/common/g++.conf \
/usr/share/qt4/mkspecs/common/unix.conf \
/usr/share/qt4/mkspecs/common/linux.conf \
/usr/share/qt4/mkspecs/qconfig.pri \
/usr/share/qt4/mkspecs/features/qt_functions.prf \
/usr/share/qt4/mkspecs/features/qt_config.prf \
/usr/share/qt4/mkspecs/features/exclusive_builds.prf \
/usr/share/qt4/mkspecs/features/default_pre.prf \
/usr/share/qt4/mkspecs/features/release.prf \
/usr/share/qt4/mkspecs/features/default_post.prf \
/usr/share/qt4/mkspecs/features/warn_on.prf \
/usr/share/qt4/mkspecs/features/qt.prf \
/usr/share/qt4/mkspecs/features/unix/thread.prf \
/usr/share/qt4/mkspecs/features/moc.prf \
/usr/share/qt4/mkspecs/features/resources.prf \
/usr/share/qt4/mkspecs/features/uic.prf \
/usr/share/qt4/mkspecs/features/yacc.prf \
/usr/share/qt4/mkspecs/features/lex.prf \
Event_with_mouse.pro
QMAKE_TARGET  = Event_with_mouse
DESTDIR       =
TARGET        = Event_with_mouse

first: all
####### Implicit rules

.SUFFIXES: .o .c .cpp .cc .cxx .C

.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.cc.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.cxx.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.C.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"

.c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"

####### Build rules

all: Makefile $(TARGET)

$(TARGET):  $(OBJECTS) 
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)

Makefile: Event_with_mouse.pro  /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt4/mkspecs/common/g++.conf \
/usr/share/qt4/mkspecs/common/unix.conf \
/usr/share/qt4/mkspecs/common/linux.conf \
/usr/share/qt4/mkspecs/qconfig.pri \
/usr/share/qt4/mkspecs/features/qt_functions.prf \
/usr/share/qt4/mkspecs/features/qt_config.prf \
/usr/share/qt4/mkspecs/features/exclusive_builds.prf \
/usr/share/qt4/mkspecs/features/default_pre.prf \
/usr/share/qt4/mkspecs/features/release.prf \
/usr/share/qt4/mkspecs/features/default_post.prf \
/usr/share/qt4/mkspecs/features/warn_on.prf \
/usr/share/qt4/mkspecs/features/qt.prf \
/usr/share/qt4/mkspecs/features/unix/thread.prf \
/usr/share/qt4/mkspecs/features/moc.prf \
/usr/share/qt4/mkspecs/features/resources.prf \
/usr/share/qt4/mkspecs/features/uic.prf \
/usr/share/qt4/mkspecs/features/yacc.prf \
/usr/share/qt4/mkspecs/features/lex.prf \
/usr/lib/libQtGui.prl \
/usr/lib/libQtCore.prl
$(QMAKE) -unix -o Makefile Event_with_mouse.pro
/usr/share/qt4/mkspecs/common/g++.conf:
/usr/share/qt4/mkspecs/common/unix.conf:
/usr/share/qt4/mkspecs/common/linux.conf:
/usr/share/qt4/mkspecs/qconfig.pri:
/usr/share/qt4/mkspecs/features/qt_functions.prf:
/usr/share/qt4/mkspecs/features/qt_config.prf:
/usr/share/qt4/mkspecs/features/exclusive_builds.prf:
/usr/share/qt4/mkspecs/features/default_pre.prf:
/usr/share/qt4/mkspecs/features/release.prf:
/usr/share/qt4/mkspecs/features/default_post.prf:
/usr/share/qt4/mkspecs/features/warn_on.prf:
/usr/share/qt4/mkspecs/features/qt.prf:
/usr/share/qt4/mkspecs/features/unix/thread.prf:
/usr/share/qt4/mkspecs/features/moc.prf:
/usr/share/qt4/mkspecs/features/resources.prf:
/usr/share/qt4/mkspecs/features/uic.prf:
/usr/share/qt4/mkspecs/features/yacc.prf:
/usr/share/qt4/mkspecs/features/lex.prf:
/usr/lib/libQtGui.prl:
/usr/lib/libQtCore.prl:
qmake:  FORCE
@$(QMAKE) -unix -o Makefile Event_with_mouse.pro

dist:
@$(CHK_DIR_EXISTS) .tmp/Event_with_mouse1.0.0 || $(MKDIR) .tmp/Event_with_mouse1.0.0
$(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/Event_with_mouse1.0.0/ && $(COPY_FILE) --parents mainwindow.h matrix.h .tmp/Event_with_mouse1.0.0/ && $(COPY_FILE) --parents main.cpp mainwindow.cpp matrix.cpp .tmp/Event_with_mouse1.0.0/ && (cd `dirname .tmp/Event_with_mouse1.0.0` && $(TAR) Event_with_mouse1.0.0.tar Event_with_mouse1.0.0 && $(COMPRESS) Event_with_mouse1.0.0.tar) && $(MOVE) `dirname .tmp/Event_with_mouse1.0.0`/Event_with_mouse1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/Event_with_mouse1.0.0


clean:compiler_clean
-$(DEL_FILE) $(OBJECTS)
-$(DEL_FILE) *~ core *.core


####### Sub-libraries

distclean: clean
-$(DEL_FILE) $(TARGET)
-$(DEL_FILE) Makefile


mocclean: compiler_moc_header_clean compiler_moc_source_clean

mocables: compiler_moc_header_make_all compiler_moc_source_make_all

compiler_moc_header_make_all: moc_mainwindow.cpp
compiler_moc_header_clean:
-$(DEL_FILE) moc_mainwindow.cpp
moc_mainwindow.cpp: mainwindow.h
/usr/bin/moc-qt4 $(DEFINES) $(INCPATH) mainwindow.h -o moc_mainwindow.cpp

compiler_rcc_make_all:
compiler_rcc_clean:
compiler_image_collection_make_all: qmake_image_collection.cpp
compiler_image_collection_clean:
-$(DEL_FILE) qmake_image_collection.cpp
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_uic_make_all:
compiler_uic_clean:
compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
compiler_yacc_impl_make_all:
compiler_yacc_impl_clean:
compiler_lex_make_all:
compiler_lex_clean:
compiler_clean: compiler_moc_header_clean

####### Compile

main.o: main.cpp mainwindow.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp

mainwindow.o: mainwindow.cpp mainwindow.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp

matrix.o: matrix.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o matrix.o matrix.cpp

moc_mainwindow.o: moc_mainwindow.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp

####### Install

install:   FORCE

uninstall:   FORCE

FORCE:


Название: Re: undefined reference(((
Отправлено: Alex Custov от Ноябрь 04, 2009, 19:57
ты файлы в каталог с проектом положи, и покажи ещё полностью .pro


Название: Re: undefined reference(((
Отправлено: voipp от Ноябрь 05, 2009, 00:13
я положил файлы библиотеки а .pro файл не изменился зато появилось после безошибочной компиляции окошко - qtcreator.bin  а в нем написано - Could not find executable please specify one.


Название: Re: undefined reference(((
Отправлено: voipp от Ноябрь 05, 2009, 00:15
и вот что выводит компилятор - Configuration unchanged, skipping QMake step.
Starting: /usr/bin/make -w
make: Вход в каталог `/home/voipp/QTPROGRAMMS/Event_with_mouse'
make: Цель `first' не требует выполнения команд.
make: Выход из каталога `/home/voipp/QTPROGRAMMS/Event_with_mouse'
Exited with code 0.


Название: Re: undefined reference(((
Отправлено: voipp от Ноябрь 05, 2009, 00:42
Все ошибка найдена спаисбо за помощь!