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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать класс автомашин http://www.cyberforum.ru/cpp-beginners/thread1134988.html
Задание Создать класс автомашин. Свойства класса- цвет машины, марка, номер Методы- машина двигается, машина тормозит. Завести 3 объекта класса Седан, серый, номер КЗ56748УН, Шкода, красный,...
C++ Фильтр для ввода даты в заданном формате Смысл: осуществляется ввод даты в формате x/y/z (не по отдельности), где x-день, y-номер месяца итд, в структуру нужно занести всё x,y,z по отдельности. Почему то не могу допереть как осуществить... http://www.cyberforum.ru/cpp-beginners/thread1134986.html
Поиск второго минимума в массиве C++
можно ли сие как-нибудь реализовать одним циклом?
Вычислить и вывести на экран в виде таблицы значения функции C++
#include <iostream> #include <conio.h> #include <math.h> #include <iomanip> #include <locale> #include <Windows.h> using namespace std; // int main() {//начало кода функции main
C++ Проверка числовой ли ввод http://www.cyberforum.ru/cpp-beginners/thread1134953.html
Здравствуйте! Задача такая. Написать программу, читающую в массив double до 10 значений пожертвований. ПРограмма должна прекращать ввод при получении нечисловой величины. Она должна выдавать среднее...
C++ Дано число t, означающее время в минутах прошедшее с начало очередного часа. Определить цвет сигнала светофора Вобщем, задача такая: Работа светофора для водителей запрограммирована следующим образом: начиная с начала каждого часа в течении 3 минут горит зеленый цвет, затем в течении одной минуты горит желтый... подробнее

Показать сообщение отдельно
Wackaloon
0 / 0 / 0
Регистрация: 31.03.2014
Сообщений: 3

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

31.03.2014, 21:12. Просмотров 378. Ответов 0
Метки (Все метки)

Используется 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;
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru