• 11396阅读
  • 15回复

[提问]请问VS2013怎么编译XP下能运行的程序? [复制链接]

上一主题 下一主题
离线yearl
 

只看楼主 倒序阅读 楼主  发表于: 2015-01-29
Qt Creator 需怎样配置?
因为要用Qt WebEngine,所以用了VS2013。可是怎样配置Qt Creator 才可以使编译出来的程序能在XP下运行呢?
离线hats1987

只看该作者 1楼 发表于: 2015-01-29
link.exe /subsystem:window,5.01
Qt 5.3.2
Win XP/7:  VC2010/ VC6 /Gcc 4.9.2
离线yearl

只看该作者 2楼 发表于: 2015-01-30
回 hats1987 的帖子
hats1987:link.exe /subsystem:window,5.01 (2015-01-29 17:15) 

谢谢。
根据提示在网上搜到说修改qmake.conf文件。
但是说法都不太一致。
有没有官方的说法?
离线dbzhang800

只看该作者 3楼 发表于: 2015-01-30
回 yearl 的帖子
yearl:谢谢。
根据提示在网上搜到说修改qmake.conf文件。
但是说法都不太一致。
有没有官方的说法?
....... (2015-01-30 11:12) 

hats 告诉你的是“最终”答案:你需要修改链接器选项  /subsystem:window,5.01

至于如何修改链接器选项,答案就多种多样了:

如果你用的是qmake的话,你可以修改 qmake.conf  (或者msvc-desktop.conf);你可以直接在你的pro文件内设置 QMAKE_LFLAGS_WINDOWS ;你可以直接设置系统的环境变量 LINK;你还可以...  
如果你Qt Creator中使用的构建工具是 qbs 或 cmake的话,又是一大堆可用的方法...
离线yearl

只看该作者 4楼 发表于: 2015-01-30
回 dbzhang800 的帖子
dbzhang800:hats 告诉你的是“最终”答案:你需要修改链接器选项  /subsystem:window,5.01
至于如何修改链接器选项,答案就多种多样了:
....... (2015-01-30 12:20) 

谢谢指点。
我只是个业余爱好者,只是玩一玩。
我使用Qt Creator
可不可以在构建工具这里添加参数
qmake.exe app.pro -r -spec win32-msvc2010 "CONFIG+=debug"  ?
比如  
qmake.exe app.pro -r -spec win32-msvc2010 "CONFIG+=debug" -SUBSYSTEM:WINDOWS,"5.01"等等。
谢谢
离线yearl

只看该作者 5楼 发表于: 2015-01-30

这是我的qmake.conf
请问应该怎样改呢?
小弟实在愚钝。

#
# qmake configuration for win32-msvc2013
#
# Written for Microsoft Visual C++ 2013
#

MAKEFILE_GENERATOR      = MSBUILD
QMAKE_PLATFORM          = win32
CONFIG                 += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe
DEFINES                += UNICODE WIN32
MSVC_VER                = 12.0
QMAKE_COMPILER_DEFINES += _MSC_VER=1800 _WIN32
contains(QMAKE_TARGET.arch, x86_64) {
    DEFINES += WIN64
    QMAKE_COMPILER_DEFINES += _WIN64
}

QMAKE_COMPILER          = msvc

QMAKE_CC                = cl
QMAKE_LEX               = flex
QMAKE_LEXFLAGS          =
QMAKE_YACC              = byacc
QMAKE_YACCFLAGS         = -d
QMAKE_CFLAGS            = -nologo -Zm200 -Zc:wchar_t -FS
QMAKE_CFLAGS_WARN_ON    = -W3
QMAKE_CFLAGS_WARN_OFF   = -W0
QMAKE_CFLAGS_RELEASE    = -O2 -MD -Zc:strictStrings
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MD -Zi -Zc:strictStrings
QMAKE_CFLAGS_DEBUG      = -Zi -MDd
QMAKE_CFLAGS_YACC       =
QMAKE_CFLAGS_LTCG       = -GL
QMAKE_CFLAGS_MP         = -MP
QMAKE_CFLAGS_SSE2       = -arch:SSE2
QMAKE_CFLAGS_SSE3       = -arch:SSE2
QMAKE_CFLAGS_SSSE3      = -arch:SSE2
QMAKE_CFLAGS_SSE4_1     = -arch:SSE2
QMAKE_CFLAGS_SSE4_2     = -arch:SSE2
QMAKE_CFLAGS_AVX        = -arch:AVX
QMAKE_CFLAGS_AVX2       = -arch:AVX

QMAKE_CXX               = $$QMAKE_CC
QMAKE_CXXFLAGS          = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_WARN_ON  = $$QMAKE_CFLAGS_WARN_ON -w34100 -w34189
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE  = $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CXXFLAGS_DEBUG    = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC     = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_LTCG     = $$QMAKE_CFLAGS_LTCG
QMAKE_CXXFLAGS_MP       = $$QMAKE_CFLAGS_MP
QMAKE_CXXFLAGS_STL_ON   = -EHsc
QMAKE_CXXFLAGS_STL_OFF  =
QMAKE_CXXFLAGS_RTTI_ON  = -GR
QMAKE_CXXFLAGS_RTTI_OFF =
QMAKE_CXXFLAGS_EXCEPTIONS_ON = -EHsc
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -D_HAS_EXCEPTIONS=0

QMAKE_INCDIR            =

QMAKE_RUN_CC            = $(CC) -c $(CFLAGS) $(INCPATH) -Fo$obj $src
QMAKE_RUN_CC_IMP        = $(CC) -c $(CFLAGS) $(INCPATH) -Fo$@ $<
QMAKE_RUN_CC_IMP_BATCH  = $(CC) -c $(CFLAGS) $(INCPATH) -Fo$@ @<<
QMAKE_RUN_CXX           = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$obj $src
QMAKE_RUN_CXX_IMP       = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ $<
QMAKE_RUN_CXX_IMP_BATCH = $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fo$@ @<<

QMAKE_LINK              = link
QMAKE_LFLAGS            = /NOLOGO /DYNAMICBASE /NXCOMPAT
QMAKE_LFLAGS_RELEASE    = /INCREMENTAL:NO
QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /DEBUG /OPT:REF /INCREMENTAL:NO
QMAKE_LFLAGS_DEBUG      = /DEBUG
QMAKE_LFLAGS_CONSOLE    = /SUBSYSTEM:CONSOLE@QMAKE_SUBSYSTEM_SUFFIX@
QMAKE_LFLAGS_WINDOWS    = /SUBSYSTEM:WINDOWS@QMAKE_SUBSYSTEM_SUFFIX@
QMAKE_LFLAGS_EXE        = \"/MANIFESTDEPENDENCY:type=\'win32\' name=\'Microsoft.Windows.Common-Controls\' version=\'6.0.0.0\' publicKeyToken=\'6595b64144ccf1df\' language=\'*\' processorArchitecture=\'*\'\"
QMAKE_LFLAGS_DLL        = /DLL
QMAKE_LFLAGS_LTCG       = /LTCG
QMAKE_EXTENSION_STATICLIB = lib

QMAKE_LIBS_CORE         = kernel32.lib user32.lib shell32.lib uuid.lib ole32.lib advapi32.lib ws2_32.lib
QMAKE_LIBS_GUI          = gdi32.lib comdlg32.lib oleaut32.lib imm32.lib winmm.lib ws2_32.lib ole32.lib user32.lib advapi32.lib
QMAKE_LIBS_NETWORK      = ws2_32.lib
QMAKE_LIBS_OPENGL       = glu32.lib opengl32.lib gdi32.lib user32.lib
QMAKE_LIBS_OPENGL_ES2   = libEGL.lib libGLESv2.lib gdi32.lib user32.lib
QMAKE_LIBS_OPENGL_ES2_DEBUG = libEGLd.lib libGLESv2d.lib gdi32.lib user32.lib
QMAKE_LIBS_COMPAT       = advapi32.lib shell32.lib comdlg32.lib user32.lib gdi32.lib ws2_32.lib

QMAKE_LIBS_QT_ENTRY     = -lqtmain

QMAKE_IDL               = midl
QMAKE_LIB               = lib /NOLOGO
QMAKE_RC                = rc

include(../common/shell-win32.conf)

VCPROJ_EXTENSION        = .vcxproj
VCSOLUTION_EXTENSION    = .sln
VCPROJ_KEYWORD          = Qt4VSv1.0
load(qt_config)
离线stlcours

只看该作者 6楼 发表于: 2015-01-30
何苦使用VS2012,我就是因为这个原因改用VS2008
离线yearl

只看该作者 7楼 发表于: 2015-01-30
回 stlcours 的帖子
stlcours:何苦使用VS2012,我就是因为这个原因改用VS2008 (2015-01-30 21:58) 

还不是因为Qt WebEngine
没办法。
离线stlcours

只看该作者 8楼 发表于: 2015-01-30
回 yearl 的帖子
yearl:还不是因为Qt WebEngine
没办法。 (2015-01-30 22:14) 

干嘛,好像QT5也支持VS2008啊
离线stlcours

只看该作者 9楼 发表于: 2015-01-30
回 yearl 的帖子
yearl:还不是因为Qt WebEngine
没办法。 (2015-01-30 22:14) 

当时查了一下,好像MS就是有意不让VS2012以后的exe支持XP,拿出解决方案来也应该是旁门左道。
离线dbzhang800

只看该作者 10楼 发表于: 2015-01-30
回 yearl 的帖子
yearl:这是我的qmake.conf
请问应该怎样改呢?
小弟实在愚钝。
....... (2015-01-30 16:45) 

就你贴的代码而言,修改下面两行即可

QMAKE_LFLAGS_CONSOLE    = /SUBSYSTEM:CONSOLE@QMAKE_SUBSYSTEM_SUFFIX@
QMAKE_LFLAGS_WINDOWS    = /SUBSYSTEM:WINDOWS@QMAKE_SUBSYSTEM_SUFFIX@


刚看了下源码, @QMAKE_SUBSYSTEM_SUFFIX@ 是在2014年4份引入 qmake.conf 文件的
如果你的Qt编译时已经target xp了,此处的 @QMAKE_SUBSYSTEM_SUFFIX@ 应该已经等价 5.01了 。
离线roywillow

只看该作者 11楼 发表于: 2015-02-01
回 dbzhang800 的帖子
dbzhang800:就你贴的代码而言,修改下面两行即可
QMAKE_LFLAGS_CONSOLE    = /SUBSYSTEM:CONSOLE@QMAKE_SUBSYSTEM_SUFFIX@
QMAKE_LFLAGS_WINDOWS    = /SUBSYSTEM:WINDOWS@QMAKE_SUBSYSTEM_SUFFIX@
....... (2015-01-30 23:54) 

话说官方的vs2013 32bit sdk是target xp的么,@QMAKE_SUBSYSTEM_SUFFIX@ 的值编译后在哪查?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线dbzhang800

只看该作者 12楼 发表于: 2015-02-02
回 roywillow 的帖子
roywillow:
话说官方的vs2013 32bit sdk是target xp的么,@QMAKE_SUBSYSTEM_SUFFIX@ 的值编译后在哪查?

这个是分3个步骤来的

1. Configure的时候,你target xp,它生成的 qconfig.pri 中会定义如下的qmake变量

QMAKE_TARGET_OS = xp

2. qmake 运行时,根据该值定义另一个qmake变量 QMAKE_SUBSYSTEM_SUFFIX  的值

equals(QMAKE_TARGET_OS, xp) : QMAKE_SUBSYSTEM_SUFFIX = ,5.01

3. qmake 运行时,将你看到的 @QMAKE_SUBSYSTEM_SUFFIX@ 的这一个占位用的字符串,替换成变量 QMAKE_SUBSYSTEM_SUFFIX 的值

QMAKE_LFLAGS +=  $$replace(QMAKE_LFLAGS_WINDOWS, @QMAKE_SUBSYSTEM_SUFFIX@, $$QMAKE_SUBSYSTEM_SUFFIX)
离线roywillow

只看该作者 13楼 发表于: 2015-02-02
回 dbzhang800 的帖子
dbzhang800:这个是分3个步骤来的
1. Configure的时候,你target xp,它生成的 qconfig.pri 中会定义如下的qmake变量
....... (2015-02-02 10:08) 

那么去检查一下qconfig.pri里有没有QMAKE_TARGET_OS就能确定喽?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线yearl

只看该作者 14楼 发表于: 2015-02-03
这是要我自己编译QT源代码啊。
离线llwj0303

只看该作者 15楼 发表于: 2015-02-05
之前有过类似困惑,后面是用cmake修改的。
专注C++,专注Qt
快速回复
限100 字节
 
上一个 下一个