【发布时间】:2016-08-04 21:54:44
【问题描述】:
我在链接我的项目时遇到问题。我正在尝试创建可以在三个不同项目之间使用的共享库。该库将用于解析 XML 文件和处理这些 XML 文件中的对象。
这是受影响的最小示例。库项目由这些文件组成
============= Library.cpp =============
#include "library.h"
Library::Library(QString name){
this->name = name;
}
============= Library.h =============
#ifndef LIBRARY_H
#define LIBRARY_H
#include <QString>
class Library
{
public:
Library(QString name);
private:
static QString name;
};
#endif // LIBRARY_H
============= Library.pro =============
QT -= gui
TARGET = Library
TEMPLATE = lib
CONFIG += staticlib
SOURCES += library.cpp
HEADERS += library.h
unix {
target.path = /usr/lib
INSTALLS += target
}
主应用程序由这些文件组成。
============= main.c =============
#include <QCoreApplication>
#include "library.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Library lib("MyLib");
return a.exec();
}
============= Application.pro =============
QT += core
QT -= gui
TARGET = Application
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
SRCDIR = $$IN_PWD/../Library
INCLUDEPATH += $$SRCDIR
SRCDIR = $$IN_PWD/../Library
INCLUDEPATH += $$SRCDIR
LIBDIR = $$IN_PWD/../build-Library-Desktop_Qt_5_5_1_GCC_64bit-Ladění/libLibrary.a
LIBS += $$LIBDIR
这是链接器的输出
g++ -c -pipe -g -Wall -W -D_REENTRANT -fPIC -DQT_CORE_LIB -I../Application -I. -I../Library -I../Library -I../../../Qt/5.5/gcc_64/include -I../../../Qt/5.5/gcc_64/include/QtCore -I. -I../../../Qt/5.5/gcc_64/mkspecs/linux-g++ -o main.o ../Application/main.cpp
g++ -Wl,-rpath,/home/mint/Qt/5.5/gcc_64 -Wl,-rpath,/home/mint/Qt/5.5/gcc_64/lib -o Application main.o /home/mint/Development/test/Application/../build-Library-Desktop_Qt_5_5_1_GCC_64bit-Ladění/libLibrary.a -L/home/mint/Qt/5.5/gcc_64/lib -lQt5Core -lpthread
/home/mint/Development/test/Application/../build-Library-Desktop_Qt_5_5_1_GCC_64bit-Ladění/libLibrary.a(library.o): In function `Library::Library(QString)':
Makefile:214: recipe for target 'Application' failed
/home/mint/Development/test/build-Library-Desktop_Qt_5_5_1_GCC_64bit-Ladění/../Library/library.cpp:6: undefined reference to `Library::name'
collect2: error: ld returned 1 exit status
当我将 Library.h 中的 static QString 名称更改为非静态变量时,一切正常。那时就可以联动了。我认为,项目文件设置正确,但我缺少什么?
【问题讨论】:
标签: c++ qt static-libraries