awtk + scons资源/问题/调试

scons

##awtk

遇到的问题:
编译1.7.0很顺利,后来项目代码用的1.6.1,在linux上面编译比较顺利,但是在windows上有些问题
1、Cannot find module 'glob'

exe cmd: node tools/idl_gen/tkc.js tools/idl_gen/tkc.json failed.
node tools/idl_gen/index.js tools/idl_gen/idl.json
internal/modules/cjs/loader.js:883
  throw err;
  ^

Error: Cannot find module 'glob'

解决:node安装glob模块
npm install -g glob

$ npm install -g glob

Command 'npm' not found, but can be installed with:

sudo apt install npm

$ node -v
v10.19.0
$ npm -v

Command 'npm' not found, but can be installed with:

sudo apt install npm

$ sudo apt install npm
^Citing for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 866352 (unattended-upgr)... 12s
$ sudo rm /var/lib/dpkg/lock-frontend
$ sudo rm /var/lib/dpkg/lock 

$ sudo apt install npm
# sucess

$ npm install -g glob
[..................] / rollbackFailedOptional: verb npm-session 616c6ae6d03da9b9
# or
$ npm install -g glob
npm WARN checkPermissions Missing write access to /usr/local/lib

$ sudo npm config set registry http://registry.npm.taobao.org
$ sudo npm install -g glob
npm WARN notsup Unsupported engine for glob@8.0.3: wanted: {"node":">=12"} (current: {"node":"10.19.0","npm":"6.14.4"})
npm WARN notsup Not compatible with your version of node/npm: glob@8.0.3

+ glob@8.0.3

2、无法解析的外部符号 _DllMainCRTStartup

  正在创建库 bin\awtk.lib 和对象 bin\awtk.exp
LINK : error LNK2001: 无法解析的外部符号 _DllMainCRTStartup
bin\awtk.dll : fatal error LNK1120: 1 个无法解析的外部命令
scons: *** [bin\awtk.dll] Error 1120

解决:修改scons的脚本
awtk.dll不需要入口,因此增加 /NOENTRY选项,找到python或者venv中的scons脚本位置,简单的办法就是直接对py文件按照关键字/dll或者/DEBUG搜索。
mslink.pypdbGenerator函数中增加 /NOENTRY

def pdbGenerator(env, target, source, for_signature):
    try:
        return ['/PDB:%s' % target[0].attributes.pdb, '/DEBUG  /NOENTRY']
    except (AttributeError, IndexError):
        return None

在这里插入图片描述

windows下用vs2019调试awtk项目

vs2019可以打开awtk项目,使用外部程序编译并调试(可能是我的python环境的问题,也可能其他原因,没有设置成功,编译时有找不到头文件的错误提示)

于是仍然使用命令行scons编译demo.exe文件,运行demo.exe程序,

使用vs2019打开awtk项目,配置项目(头文件库文件等),

“调试” -> “附加到进程”-> “找到demo.exe” -> “附加进程”,在源代码设置断点就可以调试exe了。

在 windows 下使用 gcc 编译 AWTK

在 windows 下,如果不想使用 Visual C++编译,也可以使用 gcc 编译。

  • 下载并安装 mingw(opens new window)

64 位系统安装时 architecturex 选择 x86_64。

尽量选择最新的版本来安装,版本如果太旧的话,可能编译不通过,如果编译不过的话,可以考虑升级版本来试一下。

安装之后将 gcc 的路径加入系统环境变量 PATH 中。默认路径如下:

E:\dev\x64-4.8.1-release-posix-seh-rev5\mingw64\bin  
  • 修改 awtk_config_common.py,放开注释掉的 TOOLS_NAME。
TOOLS_NAME = 'mingw'
  • 编译
scons

WSL中不能编译awtk !!!

没有ui支持

编译项目时切换不同版本的awtk SDK

在项目的awtk_locator.py中,

AWTK_ROOT = r'D:\src\gitee\awtk-1.5.4\awtk'

awtk 打包资源时使用指定的awtk root

python .\scripts\update_res.py --awtk_root=D:/src/AWStudioProjects/awtk-1.5.4 all

awtk项目scons后面指定awtk root

最新awtk-c-demos中脚本可以指定awtkroot

'awtk_root=', 'AWTK_ROOT='
scons AWTK_ROOT=D:/src/AWStudioProjects/awtk
scons awtk_root=D:/src/AWStudioProjects/awtk

调试awtk的xml_to_ui.exe

vs2019调试xml_to_ui,由于使用scons编译,awtk源码由awtk代码根目录的SConstruct定义总体环境,所以vcxproj工程的根目录是awtk源码根目录,在源码根目录中添加awtk-1.5.4.vcxprojawtk-1.5.4.vcxproj.user文件。
awtk-1.5.4.vcxproj文件内容(可作为调试awtk 项目的vs2019项目的模板)

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Debug|Win32">
      <Configuration>Debug</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="src\tkc\str.c" />
    <ClCompile Include="tools\ui_gen\xml_to_ui\xml_to_ui.c" />
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <VCProjectVersion>16.0</VCProjectVersion>
    <ProjectGuid>{9491F8C4-CC42-414E-AF49-45B76C949FDF}</ProjectGuid>
    <Keyword>MakeFileProj</Keyword>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
    <ConfigurationType>Makefile</ConfigurationType>
    <UseDebugLibraries>true</UseDebugLibraries>
    <PlatformToolset>v142</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <NMakeBuildCommandLine>scons</NMakeBuildCommandLine>
    <NMakeOutput>bin\xml_to_ui.exe</NMakeOutput>
    <NMakeCleanCommandLine>scons -c</NMakeCleanCommandLine>
    <NMakeReBuildCommandLine>scons</NMakeReBuildCommandLine>
    <NMakePreprocessorDefinitions>WIN32;_DEBUG;$(NMakePreprocessorDefinitions)</NMakePreprocessorDefinitions>
    <IncludePath>D:\src\AWStudioProjects\awtk-1.5.4\tools;D:\src\AWStudioProjects\awtk-1.5.4\src\ext_widgets;D:\src\AWStudioProjects\awtk-1.5.4\src;$(VC_IncludePath);$(WindowsSDK_IncludePath)</IncludePath>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
</Project>

其中根据源码和可执行程序不同,配置不同的IncludePath and NMakeOutput;
如果需要设置断点,将.c文件包括到项目的ClCompile中。


因为调试的是工具,所以在awtk-1.5.4.vcxproj.user中指定命令行参数,
awtk-1.5.4.vcxproj.user文件内容:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ShowAllFiles>true</ShowAllFiles>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <LocalDebuggerCommandArguments>"D:\src\AWStudioProjects\Humidifier\design\default\ui" "D:\src\AWStudioProjects\Humidifier\res\assets\default\raw\ui" bin</LocalDebuggerCommandArguments>
    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
  </PropertyGroup>
</Project>

紧在windows中做一般调试,所以只配置了Debug|Win32的环境;
两个文件保存好后,使用vs2019打开vcxproj文件,在源代码中设置断点,F5开始调试。

AWTK开发手册-AWTK开发实践指南-中文手册.pdf AWTK = Toolkit AnyWhere 随着手机、智能手表等便携式设备的普及,用户对 GUI 的要求越来越高,嵌入式系统对高性能、高可靠性、低功耗、美观炫酷的 GUI 的需求也越来越迫切,ZLG开源 GUI 引擎 AWTK 应运而生。AWTK 全称为 Toolkit AnyWhere,是 ZLG 倾心打造的一套基于 C 语言开发的 GUI 框架。旨在为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎,并支持跨平台同步开发,一次编程,终生使用。 最终目标: 支持开发嵌入式软件。 支持开发Linux应用程序。 支持开发MacOS应用程序。 支持开发Windows应用程序。 支持开发Android应用程序。 支持开发iOS应用程序。 支持开发2D游戏。 其主要特色有: 小巧。在精简配置下,不依赖第三方软件包,仅需要32K RAM + 256K FLASH即可开发一些简单的图形应用程序。 高效。采用脏矩形裁剪算法,每次只绘制和更新变化的部分,极大提高运行效率和能源利用率。 稳定。通过良好的架构设计和编程风格、单元测试、动态(valgrind)检查和Code Review保证其运行的稳定性。 丰富的GUI组件。提供窗口、对话框和各种常用的组件(用户可以配置自己需要的组件,降低对运行环境的要求)。 支持多种字体格式。内置位图字体(并提供转换工具),也可以使用stb_truetype或freetype加载ttf字体。 支持多种图片格式。内置位图图片(并提供转换工具),也可以使用stb_image加载png/jpg等格式的图片。 紧凑的二进制界面描述格式。可以手工编辑的XML格式的界面描述文件,也可以使用Qt Designer设计界面,然后转换成紧凑的二进制界面描述格式,提高运行效率,减小内存开销。 支持主题并采用紧凑的二进制格式。开发时使用XML格式描述主题,然后转换成紧凑的二进制格式,提高运行效率,减小内存开销。 支持裸系统,无需OS和文件系统。字体、图片、主题和界面描述数据都编译到代码中,以常量数据的形式存放,运行时无需加载到内存。 内置nanovg实现高质量的矢量动画,并支持SVG矢量图。 支持窗口动画、控件动画、滑动动画和高清LCD等现代GUI常见特性。 支持国际化(Unicode、字符串翻译和输入法等)。 可移植。支持移植到各种RTOS和嵌入式Linux系统,并通过SDL在各种流行的PC/手机系统上运行。 脚本化。从API注释中提取API的描述信息,通过这些信息可以自动生成各种脚本的绑定代码。 支持硬件2D加速(目前支持STM32的DMA2D和NXP的PXP)和GPU加速(OpenGL/OpenGLES/DirectX/Metal),充分挖掘硬件潜能。 丰富的文档和示例代码。 采用LGPL协议开源发布,在商业软件中使用时无需付费。 目前核心功能已经完成,内部开始在实际项目中使用了,欢迎有兴趣的朋友评估和尝试,期待您的反馈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值