プロジェクトのリンクに問題があります。私は3つの異なるプロジェクト間で使用できる共有ライブラリを作成しようとしています。このライブラリは、XMLファイルの解析と、これらのXMLファイルのオブジェクトによる一般的な処理に使用されます。QTスタティックライブラリ未定義静的変数への参照
影響を受ける最小限の例を示します。ライブラリプロジェクトはこれらのファイルで構成されています
============= 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
私は非静的変数にLibrary.hで静的 QStringの名前を変更すると、リンカ
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
の出力は、その後、すべてがOKです。それはその後リンクすることができます。私は、プロジェクトファイルが正しくセットアップされていると思いますが、何が欠けていますか?
このトピックの周りの理論についても、あなたの助けてくれてありがとう!実際にはシングルトンを作成したいので、静的はQString型ではありません。 QStringは単に説明のためのものでした。とにかくあなたのサポートに感謝します。 – user2336793
@ user2336793シングルトンについては、[この質問と回答](http://stackoverflow.com/q/1008019/1717300)(または他のリソースについてはgoogle)を読むべきでしょう。シングルトンや、さまざまな種類の問題を抱える方法がいくつかあります。 – hyde