• 5403阅读
  • 0回复

[讨论]cmake生成QT输出动态库,隐性调用时链接错误2001 [复制链接]

上一主题 下一主题
离线boystu
 

只看楼主 倒序阅读 楼主  发表于: 2012-03-15
关键词: QT4
具体的问题描述如下:
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
快速回复
限100 字节
 
上一个 下一个