使用自己的库编译Qt GUI时链接器错误

时间:2014-10-06 13:22:18

标签: c++ qt visual-studio-2013 linker

我尝试在我的Qt应用程序中使用包含自己的库。

问题是当我编译应用程序时,我得到以下链接器错误:

MyTestLib_debug.lib(MyTestLib_debug.dll) : error LNK2005: "public: __thiscall std::_String_val<struct std::_Simple_types<char> >::_String_val<struct std::_Simple_types<char> >(void)" (??0?$_String_val@U?$_Simple_types@D@std@@@std@@QAE@XZ) already defined in moc_mainwindow.obj
MyTestLib_debug.lib(MyTestLib_debug.dll) : error LNK2005: "public: char * __thiscall std::_String_val<struct std::_Simple_types<char> >::_Myptr(void)" (?_Myptr@?$_String_val@U?$_Simple_types@D@std@@@std@@QAEPADXZ) already defined in moc_mainwindow.obj
MyTestLib_debug.lib(MyTestLib_debug.dll) : error LNK2005: "public: char const * __thiscall std::_String_val<struct std::_Simple_types<char> >::_Myptr(void)const " (?_Myptr@?$_String_val@U?$_Simple_types@D@std@@@std@@QBEPBDXZ) already defined in moc_mainwindow.obj
MyTestLib_debug.lib(MyTestLib_debug.dll) : error LNK2005: "public: __thiscall std::_String_val<struct std::_Simple_types<char> >::~_String_val<struct std::_Simple_types<char> >(void)" (??1?$_String_val@U?$_Simple_types@D@std@@@std@@QAE@XZ) already defined in moc_mainwindow.obj
debug\qtQT.exe : fatal error LNK1169: one or more multiply defined symbols found

我使用Visual Studio 2013 32位进行编译,使用Qt Creator 3.2.1编写Qt 5.3.2。 仅当我将小部件添加到Qt应用程序时,才会出现此问题。我尝试了各种MSVC链接器选项但没有成功。最值得注意的是,我尝试过这些/MT/MD选项。一个问题是我的库使用了其他库,我不知道它们是如何编译的。

有关如何解决此问题的任何想法?

编辑: 这里要求的是mainwindow.h。这是Qt创建者在创建一个新的主窗口时创建的默认标题(我只删除了空行以在SO上节省一些空间)。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

1 个答案:

答案 0 :(得分:1)

您在图书馆的代码中链接两次。 我猜你是隐式添加这个库(VS取决于对话框)和显式(使用命令行添加)或类似的东西。

或者更可能的是,您将这些函数的实现放在类定义之外的头文件中,并且没有'inline'关键字。 然后将定义移动到.cpp文件。