Форум программистов, компьютерный форум CyberForum.ru

Ошибка LNK2019 при подключении библиотеки с несколькими исходными файлами (используется Qt 5.2.0) - C++

Восстановить пароль Регистрация
 
Wackaloon
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 3
31.03.2014, 21:12     Ошибка LNK2019 при подключении библиотеки с несколькими исходными файлами (используется Qt 5.2.0) #1
Используется Qt 5.2.0, но думаю проблема более глобальная в плане своих корней.

Есть класс CommonData, где объявлены несколько статических переменных
CommonData.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct Complex
{
    double zed;
    ...
};
 
typedef QVector<Complex> ValuesType;
 
class CommonData
{
public:
    CommonData(); 
    ~CommonData();
    static ValuesType *p_Values;
};
CommonData.срр
C++
1
2
3
4
5
6
7
8
9
10
#include "commondata.h"
 
ValuesType *CommonData::p_Values;
 
CommonData::CommonData()
{
}
CommonData::~CommonData()
{
}
Есть другой класс, который использует эту переменную
SignalProcess.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef SIGNALPROCESS_H
#define SIGNALPROCESS_H
#include "signalprocess_global.h"
#include "commondata.h"
 
class SIGNALPROCESSSHARED_EXPORT SignalProcess
{
 
public:
    SignalProcess();
    ~SignalProcess();
// функция которая работает с переменной p_Values
    static double someFunction();
};
 
#endif // SIGNALPROCESS_H
SignalProcess.срр
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "signalprocess.h"
 
SignalProcess::SignalProcess()
{
}
SignalProcess::~SignalProcess()
{
}
 
double SignalProcess::someFunction()
{
    double k(0.0);
    CommonData::p_Values->append(k)
    return k;
}
Все это добро компонуется и подключается как библиотека к другому проекту
При попытке компиляции выдается череда ошибок
C++
1
2
3
viewer.obj:-1: ошибка: LNK2019: unresolved external symbol "public: __thiscall CommonData::~CommonData(void)" (??1CommonData@@QAE@XZ) referenced in function "public: void * __thiscall CommonData::`scalar deleting destructor'(unsigned int)" (??_GCommonData@@QAEPAXI@Z)
viewer.obj:-1: ошибка: LNK2019: unresolved external symbol "public: __thiscall CommonData::CommonData(void)" (??0CommonData@@QAE@XZ) referenced in function "public: __thiscall Viewer::Viewer(class QWidget *)" (??0Viewer@@QAE@PAVQWidget@@@Z)
viewer.obj:-1: ошибка: LNK2019: unresolved external symbol "public: static class QVector<struct Complex> * CommonData::p_Values" (?p_Values@CommonData@@2PAV?$QVector@UQrsComplex@@@@A) referenced in function "private: void __thiscall Viewer::readFile(void)" (?readFile@Viewer@@AAEXXZ)
Как я понимаю, компилятор просто игнорирует существование CommonData.cpp и описанной в нем инициализации статической переменной и описания конструктора и деструктора.

Вариант решения проблемы, который я нашел - инициализировать статические переменные в срр файле, что уже есть, но не помогает.
Возможно проблема в подключении библиотеки, пробовал подключать тем же способом другую библиотеку с одним .h и одним .срр файлом, без статических переменных - все работало.

подключается библиотека в .pro файле таким образом
C++
1
2
3
4
5
6
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../monitor/SignalProcess/release/ -lsignalprocess
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../monitor/SignalProcess/debug/ -lsignalprocess
else:unix: LIBS += -L$$PWD/../monitor/SignalProcess/ -lsignalprocess
 
INCLUDEPATH += $$PWD/../lmonitor/SignalProcess
DEPENDPATH += $$PWD/../lmonitor/SignalProcess
так же в самом .h файле проекта подключается хедер
C++
1
#include "../monitor/SignalProcess/SignalProcess.h"
Добавлено через 3 часа 42 минуты
Проблема решена, необходимо было сделать структуру и класс экспортируемыми

CommonData.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct SIGNALPROCESSSHARED_EXPORT Complex
{
    double zed;
    ...
};
 
typedef QVector<Complex> ValuesType;
 
class SIGNALPROCESSSHARED_EXPORT CommonData
{
public:
    CommonData(); 
    ~CommonData();
    static ValuesType *p_Values;
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2014, 21:12     Ошибка LNK2019 при подключении библиотеки с несколькими исходными файлами (используется Qt 5.2.0)
Посмотрите здесь:

C++ Структуры/Работа с файлами(ошибка линковщика error LNK2019: ссылка на неразрешенный внешний символ)
При подключении библиотеки вылетает программа C++
C++ Ошибка при подключении библиотеки
C++ Ошибка при подключении динамической библиотеки
Ошибка при подключении библиотеки graphics и файла ресурсов libbgi.lib C++
Создание статической библиотеки из нескольких файлов с несколькими заголовочными файлами C++
C++ ошибка при подключении библиотеки
C++ Ошибка при подключении заголовочного файла: "error LNK2019: unresolved external symbol"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 02:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru