使用1的struct成员对齐编译Qt

时间:2013-05-26 18:19:24

标签: qt compiler-construction compilation compiler-flags

问题

我有一个在Visual Studio 2005中使用的Qt应用程序,该应用程序使用了大量其他库,这些库都使用1的结构成员对齐编译。我也很确定Qt默认使用结构成员对齐0.

当我使用结构成员对齐为0(其他库将失败)或1(Qt将失败)编译我的应用程序时,这显然会导致问题。

我尝试了什么

projects.pro文件中的编译器标志

  1. 我下载了Qt。
  2. 的源代码
  3. 我在projects.pro文件的顶部添加了以下内容

    QMAKE_CXXFLAGS_DEBUG + = -Zp1 QMAKE_CXXFLAGS_RELEASE + = -Zp1

  4. 我使用visual studio命令行启动configure.exe,它会创建makefile。

  5. 我开始使用nmake然后编译Qt。
  6. 这会导致与Qt的0也许-Zp1结构成员对齐编译(我也试过/ ZP1)不是由编译器识别,但因为这是Studio如何视觉在其属性页中使用它,这将让我感到吃惊:

    Struct Member Alignment 1

    makefile中的

    编译器标志

    现在正在考虑做同样的事情:

    1. 下载Qt。
    2. 的源代码
    3. 在visual studio命令行中运行configure.exe。
    4. 此时我有makefile,我可以改变它,以便它可以使用1的结构成员对齐。这里没有成功。

      我的问题

      如何编译Visual Studio 2005的Qt,结构成员对齐为1?

1 个答案:

答案 0 :(得分:1)

Qt不支持与8(默认)不同的struct member aligment。解决此问题的唯一方法是使用#pragma pack

#pragma pack( [ show ] | [ push | pop ] [, identifier ] , n  )

包围所有Qt代码并包含推送和弹出:

#pragma pack(push, 8)
...
#pragma pack(pop)