具体的问题描述如下:
CMakeLists.txt文件内容如下:
cmake_minimum_required(VERSION 2.6)
PROJECT(testQt)
FIND_PACKAGE(Qt4 REQUIRED)
INCLUDE(${QT_USE_FILE})
SET(DLL_SOURCE testDLL.cpp)
SET(DLL_HEADER testDLL.h)
SET(EXE_SOURCE main.cpp)
QT4_WRAP_CPP(MOCSrcs ${DLL_HEADER})
ADD_LIBRARY(dllTest SHARED ${DLL_SOURCE} ${MOCSrcs})
ADD_EXECUTABLE(testQt WIN32 ${EXE_SOURCE})
TARGET_LINK_LIBRARIES(dllTest
${QT_LIBRARIES})
TARGET_LINK_LIBRARIES(testQt
dllTest
${QT_LIBRARIES}
${QT_QTMAIN_LIBRARY})
testDLL.h文件内容如下:
#ifndef testDLL_h__
#define testDLL_h__
#define V_FRAME_WORK_EXPORTS
#if defined(V_FRAME_WORK_EXPORTS)
#define V_FRAME_WORK_EXPORT Q_DECL_EXPORT
#else
#define V_FRAME_WORK_EXPORT Q_DECL_EXPORT
#endif
#include <QPushButton>
class V_FRAME_WORK_EXPORT testDLL : public QPushButton
{
Q_OBJECT
public:
testDLL(QWidget* parent = 0);
~testDLL();
};
#endif // testDLL_h__
testDLL.cpp文件内容如下:
#include "testDLL.h"
testDLL::testDLL(QWidget* parent /* = 0 */):QPushButton(parent)
{
this->setText("TestDll");
}
testDLL::~testDLL()
{
}
以上文件构成了DLL输出动态连接库项目
下面项目是调用项目,文件内容包括main.cpp
#include <QApplication>
#include "testDLL.h"
#include <QMainWindow>
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QMainWindow mainWindow;
testDLL* dll = new testDLL(&mainWindow);
mainWindow.setCentralWidget(dll);
mainWindow.show();
app.exec();
}
编译动态库的项目时,没有问题,但是当调用的时候就会产生一下错误:
1>------ Build started: Project: test, Configuration: Debug x64 ------
1>Build started 2012/3/15 11:35:34.
1>InitializeBuildStatus:
1> Touching "x64\Debug\test.unsuccessfulbuild".
1>ClCompile:
1> main.cpp
1>ManifestResourceCompile:
1> All outputs are up-to-date.
1>Link:
1> Creating library D:\cmake\testQT1\testQt\x64\Debug\test.lib and object D:\cmake\testQT1\testQt\x64\Debug\test.exp
1>main.obj : error LNK2001: unresolved external symbol "public: static struct QMetaObject const testDLL::staticMetaObject" (?staticMetaObject@testDLL@@2UQMetaObject@@B)
1>D:\cmake\testQT1\testQt\x64\Debug\test.exe : fatal error LNK1120: 1 unresolved externals
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.24
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
如果第一个库生成静态库,怎么没有问题,可以编译使用。求助各位,我的错误在哪里?QT是我自己编译的,X64 win7系统,VS2010