移植 Qtopia-core-opensource-src-4.3.0beta 到 PXA270

来源:互联网 发布:淘宝卖家多客服设置 编辑:程序博客网 时间:2024/05/17 03:04

移植这个qtopia-core比较麻烦,由于我的编译器是ARM-GCC-2.95的,有很多地方要修改才能交叉编译成功。不过我也试过用3.4.2的ARM交叉编译器编译过,也是有很多编译错误的。
1.下面是需要修改的文件或者配置的详细情况:
1).修改 src/corelib/kernel/qvariant_p.h 文件的 v_cast 函数
template <typename T>
inline const T *v_cast(const QVariant::Private *nd, T * = 0)
{
    return ((sizeof(T) > sizeof(QVariant::Private::Data))
            ? static_cast<const T *>(d->data.shared->ptr)
            : static_cast<const T *>(static_cast<const void *>(&d->data.c)));
}
修改为:
template <typename T>
inline const T *v_cast(const QVariant::Private *nd, T * = 0)
{
    QVariant::Private *d = const_cast<QVariant::Private *>(nd);
    return ((sizeof(T) > sizeof(QVariant::Private::Data))
            ? static_cast<T *>(d->data.shared->ptr)
            : static_cast<T *>(static_cast<void *>(&d->data.c)));
}

2).修改 src/gui/embedded/qwssignalhandler_p.h

//#ifdef Q_OS_BSD4
typedef sig_t sighandler_t;
//#endif

3).修改/src/gui/painting/qdrawhelper_p.h 把 template<> 去掉

4).编译configure只能用16,32的颜色深度

5).修改src/gui/tex/qfontengine_qpf.cpp 第57行,提到 #ifdef QT_LSB 外面

6).修改src/gui/styles/qstylesheetstyle.cpp 1902 行开始
struct RuleRoleMap {
        int state;
        QPalette::ColorGroup group;
    } map[3]= {
        { PseudoClass_Enabled, QPalette::Active },
        { PseudoClass_Disabled, QPalette::Disabled },
        { PseudoClass_Enabled, QPalette::Inactive }
    };
修改为:
struct RuleRoleMap {
        int state;
        QPalette::ColorGroup group;
    };
    struct RuleRoleMap map[3];
    map[0].state = PseudoClass_Enabled; map[0].group = QPalette::Active;
    map[1].state = PseudoClass_Disabled; map[1].group = QPalette::Disabled;
    map[2].state = PseudoClass_Enabled; map[2].group = QPalette::Inactive;

7).src/gui/util/qdesktopservices_qws.cpp编译有错,配置去掉desktopservices 属性 -no-feature-desktopservices

8).修改 src/svg/qsvghandler.cpp 文件,否则308行的strtof编译有错应该是c99标准相关问题。把   static qreal toDouble(const QChar *&str) 的前面加
extern float strtof(const char * str, char**nstr);  定义。

9).修改 src/script/qscriptlexer.cpp 文件,把  int QScript::Lexer::lex() 的前面加
extern long double strtold(const char *nptr, char **endptr); 定义。

10).修改src/script/qscriptextqobject.cpp,代码覆盖了三目运算符 ? :,  把 169-182行:
 if (index != -1) {
            QMetaProperty prop = meta->property(index);
            if (prop.isScriptable()) {
                member->native(nameId, index,
                               QScriptValue::Undeletable
                               | QScriptValue::SkipInEnumeration
                               | (GeneratePropertyFunctions
                                  ? (QScriptValue::PropertyGetter
                                     | QScriptValue::PropertySetter)
                                  : QScriptValue::PropertyFlag(0))
                               | PROPERTY_ID);
                return true;
            }
        }
改为:
        if (index != -1) {
            QMetaProperty prop = meta->property(index);
            if (prop.isScriptable()) {
  int tmp;
  if(GeneratePropertyFunctions)
   tmp = QScriptValue::PropertyGetter | QScriptValue::PropertySetter;
  else tmp = QScriptValue::PropertyFlag(0);
                member->native(nameId, index,
                               QScriptValue::Undeletable
                               | QScriptValue::SkipInEnumeration
                               | tmp
                               | PROPERTY_ID);
                return true;
            }
        }


2.交叉编译不多说,运行以下脚本:
#----------------------------------------------------------------------------------#
#!/bin/shexport QTCDIR=`pwd`
export QTDIR=$QTCDIR
#交叉编译器路径
export PATH=/opt/host/armv4l/bin:$PATH
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
#depths参数设置有8位的话2.95的编译器编译会出错,desktopservices模块也会出错,要去掉
./configure -no-cups -xplatform qws/linux-arm-g++ -opengl -no-qvfb -depths 16,32 -embedded arm -no-feature-desktopservicesmake
#----------------------------------------------------------------------------------#
编译好后 $QTCDIR/lib 就会有可以是用的动态库...
没有搞触摸屏,有兴趣的可以搞一下。

原创粉丝点击