Using Library In QTCreator Undefined Reference

混江龙づ霸主 提交于 2019-12-11 07:24:13

问题


I am building my own library of functions I use to help me learn C++. I am attempting a simple QT application and when I run the app I get an undefined error. Not sure what I am doing wrong, and its probably a noob thing.

Library Files

CC_Number.h

#ifndef CC_NUMBER_H
#define CC_NUMBER_H
#include <string>

using namespace std;

class CC_Number
{
public:
    CC_Number();
    virtual ~CC_Number();
    int randCC(int imin=0, int imax=1);
    int arraySize(int x[]);
    int arraySize(double x[]);
    int arraySize(float x[]);
    int arraySize(string x[]);
    string int_to_str(int i);
protected:
private:
};
#endif // CC_NUMBER_H

CC_Number.cpp

#include "CC_Number.h"
#include <sstream>

using namespace std;

CC_Number::CC_Number()
{
//ctor
}

CC_Number::~CC_Number()
{
//dtor
}

string CC_Number::int_to_str(int i){
stringstream ss;
ss << i;
string str = ss.str();
return str;
}

Code That Calls The Library

Animal_Birthdate.h

#ifndef ANIMAL_BIRTHDATE_H
#define ANIMAL_BIRTHDATE_H
#include "/home/mongo/Cpp/CC_Cpp/CC_Number.h"
#include <iostream>
#include <string>

using namespace std;

class Animal_Birthdate
{
public:
Animal_Birthdate();
Animal_Birthdate(int m, int d, int y);
string getBirthdate();
private:
int intMonth;
int intDay;
int intYear;
};

#endif // ANIMAL_BIRTHDATE_H

Animal_Birthdate.cpp

#include "animal_birthdate.h"
#include "/home/mongo/Cpp/CC_Cpp/CC_Number.h"
#include <iostream>
#include <string>

using namespace std;

Animal_Birthdate::Animal_Birthdate()
:intMonth(1), intDay(1), intYear(1)
{

}

Animal_Birthdate::Animal_Birthdate(int m, int d, int y)
:intMonth(m), intDay(d), intYear(y)
{

}

string Animal_Birthdate::getBirthdate()
{
CC_Number c;
string bd = c.int_to_str(intMonth);
return bd;
}

Errors I am Receiving /home/mongo/Cpp/CC_Herd_Manager/animal_birthdate.o:-1: In function `Animal_Birthdate::getBirthdate()':

/home/mongo/Cpp/CC_Herd_Manager/animal_birthdate.cpp:-1: error: undefined reference to `CC_Number::CC_Number()'

/home/mongo/Cpp/CC_Herd_Manager/animal_birthdate.cpp:-1: error: undefined reference to `CC_Number::int_to_str(int)'

Contents of CC_Cpp.pro

#-------------------------------------------------
#
# Project created by QtCreator 2013-05-31T10:42:21
#
#-------------------------------------------------

QT       -= core gui

TARGET = CC_Cpp
TEMPLATE = lib

DEFINES += CC_CPP_LIBRARY

SOURCES += \
CC_Number.cpp \
CC_File.cpp

HEADERS +=\
    cc_cpp_global.h \
CC_Number.h \
CC_File.h

unix:!symbian {
maemo5 {
    target.path = /opt/usr/lib
} else {
    target.path = /usr/lib
}
INSTALLS += target
}

回答1:


It doesn't look that you need "a library" for what you're doing. I'd suggest simply using multiple translation units linked together into a simple application as a starting point. I.e. remove TEMPLATE = lib and you'll be set.

If you'd like to learn how to create libraries with qmake, read about the TEMPLATE = subdirs and read qmake's documentation which contains all information about how to produce libraries, what the difference between static and dynamic ones are, how to link to them, etc.




回答2:


I added the following to the template file of the project that was trying to use the library and it worked.

SOURCES += main.cpp\
    mainwindow.cpp \
animal.cpp \
email.cpp \
owner.cpp \
phone.cpp \
/home/mongo/Cpp/CC_Cpp/CC_Number.cpp \
/home/mongo/Cpp/CC_Cpp/CC_Date.cpp \
/home/mongo/Cpp/CC_Cpp/CC_TimeStamp.cpp

HEADERS  += mainwindow.h \
animal.h \
email.h \
owner.h \
phone.h \
/home/mongo/Cpp/CC_Cpp/CC_Number.h \
/home/mongo/Cpp/CC_Cpp/CC_Date.h \
/home/mongo/Cpp/CC_Cpp/CC_TimeStamp.h


来源:https://stackoverflow.com/questions/16861783/using-library-in-qtcreator-undefined-reference

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!