求救:QT静态编译的问题

AAA20090987 2010-11-04 05:35:43
我的环境是:VS2008 + QT4.6.2 + WINDOWS7

http://blog.csdn.net/SysThink/archive/2010/05/16/5596060.aspx
我按上面的方法,设置了QT的静态编译的方法,
但设置好了之后,却连hello, qt这个程序都通不过编译了
debug,release都不行,我试了运行库(MDd, MT等)都不行,
请大家帮帮忙吧,我应该怎么办?
...全文
568 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
AAA20090987 2010-11-05
  • 打赏
  • 举报
回复
算了算了,不讨论这个了,越说越乱
我下了个qt creator,用它能方便地解决静态编译的问题了

这个帖子的问题,还是等我的实力强一点之后,再慢慢研究吧
谢谢dbzhang800关注了这个帖子这么久,给了我这么多帮助。

结帖
dbzhang800 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 aaa20090987 的回复:]

引用 7 楼 dbzhang800 的回复:
哦,你用的VS2008的IDE环境?那你直接在工程属性看链接参数就够了,看看这两个库怎么被你同时链上的

是这个吗?

附加依赖项:
kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib gdi32.lib comdlg32.lib o……
[/Quote]

老大,咱们还是回到一开始吧。能不能告诉大家:你的Qt到底是 动态编译的Qt 还是 静态编译的Qt?

为何出现的全是Qt的动态库,你有没有下载Qt源码并编译出Qt的静态库?
AAA20090987 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dbzhang800 的回复:]
哦,你用的VS2008的IDE环境?那你直接在工程属性看链接参数就够了,看看这两个库怎么被你同时链上的[/Quote]

是这个吗?

附加依赖项:
kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib winspool.lib ws2_32.lib ole32.lib user32.lib advapi32.lib qtmain.lib QtCore4.lib QtGui4.lib
dbzhang800 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 aaa20090987 的回复:]

引用 5 楼 dbzhang800 的回复:

贴你的 Makefile.Debug 或 Makfile.Release 的前20行来看看有什么异常。


网上帖子也都够让人郁闷的,编译Qt,不去建议下载源码,总是在现有动态编译的Qt基础上进行,一旦搞错,好端端的动态编译都出问题。


弱弱地问一下:Makefile.Debug 或 Makfile.Release 这两个文件在哪……
[/Quote]
哦,你用的VS2008的IDE环境?那你直接在工程属性看链接参数就够了,看看这两个库怎么被你同时链上的
AAA20090987 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dbzhang800 的回复:]

贴你的 Makefile.Debug 或 Makfile.Release 的前20行来看看有什么异常。


网上帖子也都够让人郁闷的,编译Qt,不去建议下载源码,总是在现有动态编译的Qt基础上进行,一旦搞错,好端端的动态编译都出问题。
[/Quote]

弱弱地问一下:Makefile.Debug 或 Makfile.Release 这两个文件在哪呢?
dbzhang800 2010-11-04
  • 打赏
  • 举报
回复
贴你的 Makefile.Debug 或 Makfile.Release 的前20行来看看有什么异常。


网上帖子也都够让人郁闷的,编译Qt,不去建议下载源码,总是在现有动态编译的Qt基础上进行,一旦搞错,好端端的动态编译都出问题。
AAA20090987 2010-11-04
  • 打赏
  • 举报
回复
我的例子程序
#include <QtGui/QLabel>
#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel *label = new QLabel("Hello, world");
label->show();
return a.exec();
}


当用(运行库)MTD,DEBUG编译时,出现了以下错误
1>------ 已启动生成: 项目: dd, 配置: Debug Win32 ------
1>正在编译...
1>main.cpp
1>正在链接...
1>QtCored4.lib(QtCored4.dll) : error LNK2005: "public: __thiscall QString::~QString(void)" (??1QString@@QAE@XZ) 已经在 main.obj 中定义
1>QtCored4.lib(QtCored4.dll) : error LNK2005: "public: bool __thiscall QBasicAtomicInt::deref(void)" (?deref@QBasicAtomicInt@@QAE_NXZ) 已经在 main.obj 中定义
1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已经在 LIBCMTD.lib(typinfo.obj) 中定义
1>msvcrtd.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已经在 LIBCMTD.lib(typinfo.obj) 中定义
1>LIBCMTD.lib(crt0init.obj) : warning LNK4098: 默认库“msvcrtd.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>D:\VS2008\QT\dd\Debug\dd.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
1>生成日志保存在“file://d:\VS2008\QT\dd\dd\Debug\BuildLog.htm”
1>dd - 5 个错误,1 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========



当用(运行库)MT,release编译时,出现以下错误

1>------ 已启动生成: 项目: dd, 配置: Release Win32 ------
1>正在链接...
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: "public: __thiscall std::exception::exception(char const * const &)" (??0exception@std@@QAE@ABQBD@Z) 已经在 LIBCMT.lib(stdexcpt.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: "public: virtual __thiscall std::exception::~exception(void)" (??1exception@std@@UAE@XZ) 已经在 LIBCMT.lib(stdexcpt.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: "public: __thiscall std::exception::exception(void)" (??0exception@std@@QAE@XZ) 已经在 LIBCMT.lib(stdexcpt.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: "public: __thiscall std::exception::exception(class std::exception const &)" (??0exception@std@@QAE@ABV01@@Z) 已经在 LIBCMT.lib(stdexcpt.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: __invalid_parameter_noinfo 已经在 LIBCMT.lib(invarg.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _memmove 已经在 LIBCMT.lib(memmove.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _isupper 已经在 LIBCMT.lib(_ctype.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _isalpha 已经在 LIBCMT.lib(_ctype.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _isdigit 已经在 LIBCMT.lib(_ctype.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _isspace 已经在 LIBCMT.lib(_ctype.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _malloc 已经在 LIBCMT.lib(malloc.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _free 已经在 LIBCMT.lib(free.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: __get_tzname 已经在 LIBCMT.lib(timeset.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: __tzset 已经在 LIBCMT.lib(tzset.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: __control87 已经在 LIBCMT.lib(_ieee87_.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: __clearfp 已经在 LIBCMT.lib(_ieee87_.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _strncpy_s 已经在 LIBCMT.lib(strncpy_s.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _strncmp 已经在 LIBCMT.lib(strncmp.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _strcpy_s 已经在 LIBCMT.lib(strcpy_s.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _realloc 已经在 LIBCMT.lib(realloc.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _strchr 已经在 LIBCMT.lib(strchr.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _getenv_s 已经在 LIBCMT.lib(getenv.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _exit 已经在 LIBCMT.lib(crt0dat.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: __errno 已经在 LIBCMT.lib(dosmap.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _calloc 已经在 LIBCMT.lib(calloc.obj) 中定义
1>MSVCRT.lib(MSVCR90.dll) : error LNK2005: _abort 已经在 LIBCMT.lib(abort.obj) 中定义
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已经在 LIBCMT.lib(typinfo.obj) 中定义
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) 已经在 LIBCMT.lib(typinfo.obj) 中定义
1>LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>QtGui.lib(qapplication.obj) : warning LNK4217: 本地定义的符号 ?qt_call_post_routines@@YAXXZ (void __cdecl qt_call_post_routines(void)) 在函数 "public: virtual __thiscall QApplication::~QApplication(void)" (??1QApplication@@UAE@XZ) 中导入
1>QtGui.lib(qwhatsthis.obj) : warning LNK4217: 本地定义的符号 ?qDeleteInEventHandler@@YAXPAVQObject@@@Z (void __cdecl qDeleteInEventHandler(class QObject *)) 在函数 "public: static void __cdecl QWhatsThis::hideText(void)" (?hideText@QWhatsThis@@SAXXZ) 中导入
1>D:\VS2008\QT\dd\Release\dd.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
1>生成日志保存在“file://d:\VS2008\QT\dd\dd\Release\BuildLog.htm”
1>dd - 29 个错误,3 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
AAA20090987 2010-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dbzhang800 的回复:]

http://www.beiww.com/doc/oss/smart-questions.html

最关键的问题是:你静态编译Qt的时候有没有出问题,有的话是什么问题;没有的话,你用编译好的Qt编译自己的程序时遇到的是什么问题。
[/Quote]

谢谢提醒,这几天被这个问题搞得心烦意燥,
发帖之前,没说清楚,请见谅。
huangzp1985 2010-11-04
  • 打赏
  • 举报
回复
最好是把demo,examples等等不需要的删除不编译,我以前遇到过这种情况,
dbzhang800 2010-11-04
  • 打赏
  • 举报
回复
http://www.beiww.com/doc/oss/smart-questions.html

最关键的问题是:你静态编译Qt的时候有没有出问题,有的话是什么问题;没有的话,你用编译好的Qt编译自己的程序时遇到的是什么问题。

16,240

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧