我尝试在我的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
答案 0 :(得分:1)
您在图书馆的代码中链接两次。 我猜你是隐式添加这个库(VS取决于对话框)和显式(使用命令行添加)或类似的东西。
或者更可能的是,您将这些函数的实现放在类定义之外的头文件中,并且没有'inline'关键字。 然后将定义移动到.cpp文件。