洞察探索如何通过一套代码实现跨平台小程序开发与高效管理,助力企业数字化转型
965
2022-08-27
第一份qnx代码
注:本文的hello word例子不是用IDE编译后运行的。
我得到了含.qnx、target、host、install、jre、deployment等文件夹的环境包后,放到C盘,导师说 Momentics IDE不用安装就能用,我惊呆了! 但,事情果然没有那么简单,证书失效,第二次打开同一份工程看不了文件。我的内心是崩溃的。
命令行
然后我就只能用命令行了。 一份批处理文件:
call c:\qnx660\qnx660-env.batE:cd E:\code
拖动到cmd中,直接回车运行,相关的qnx变量设置好:
D:\>call c:\qnx660\qnx660-env.batD:\>REM This script is sets environment variables requires to use this version of QNX Software Development Platform 6.6D:\>REM from the command line.D:\>REMD:\>set QNX_TARGET=C:\qnx660\target\qnx6D:\>set QNX_TARGET=C:/qnx660/target/qnx6D:\>set QNX_HOST=C:\qnx660\host\win32\x86D:\>set QNX_HOST=C:/qnx660/host/win32/x86D:\>set QNX_CONFIGURATION=C:\qnx660\.qnxD:\>set MAKEFLAGS=-IC:\qnx660\target\qnx6\usr\includeD:\>set MAKEFLAGS=-IC:/qnx660/target/qnx6/usr/includeD:\>set PATH=C:\qnx660\host\win32\x86\usr\bin;C:\qnx660\.qnx\bin;C:\qnx660\jre\bin;C:\qnx660\host\win32\x86\usr\bin;C:\qnx660\.qnx\bin;C:\qnx660\jre\bin;C:\qnx660\host\win32\x86\usr\bin;C:\qnx660\.qnx\bin;C:\qnx660\jre\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Vim\vim80;D:\TortoiseSVN\bin;C:\qnx660\deployment\qnx-car\deployment\scriptsD:\>set qnxCarDeployment=C:\qnx660\deployment\qnx-carD:\>if exist C:\qnx660\deployment\qnx-car\qnxcar-env.bat C:\qnx660\deployment\qnx-car\qnxcar-env.bat...
接着,就能在E盘下使用一些qnx命令了。
重要的头文件
在 ${QNX_TARGET}/usr/include 下有许多不同用途的头文件。
arpa
和网络相关,比如telnet, internet, ftp. 例如:C:\qnx660\target\qnx6\usr\include\arpa
hw
描述硬件设备 例如:C:\qnx660\target\qnx6\usr\include\hw
arm, x86
和cpu、寄存器相关的头文件
C:\qnx660\target\qnx6\usr\include>find . -name *cpu.h./arm/cpu.h./io-pkt/machine/cpu.h./x86/cpu.h
和中断相关的*intr.h
C:\qnx660\target\qnx6\usr\include>find . -name "*intr.h"./arm/intr.h./intr.h./io-pkt/machine/intr.h./io-pkt/nw_intr.h./x86/intr.h
内存函数malloc
C:\qnx660\target\qnx6\usr\include>find . -name malloc*./malloc.h./rcheck/malloc.h./sys/malloc.h
net
网络接口相关的头文件 C:/qnx660/target/qnx6/usr/include/net
netinet,netinet6,netkey
和tcp/ip相关的头文件
C:\qnx660\target\qnx6\usr\include>find . -regex "^\./net[a-z]+[^h]$"./netdrvr./netinet./netinet6./netipsec./netkey
呀,找多了,只有netinet,netinet6,netkey哈。
编译arm、x86的hello world
写一份非常简单的C代码hello.c
#include
然后用qcc针对arm, x86两种架构的处理器各编译得到一份可执行文件。 x86是默认的: E:\share\learn\helloT>qcc hello.c 这样得到的a.out就是x86的可执行文件。 接着,用qcc查看其支持的平台:
E:\share\learn\helloT>qcc -Vcc: targets available in C:/qnx660/host/win32/x86/etc/qcc: 4.7.3,gcc_ntoarmv7le 4.7.3,gcc_ntoarmv7le_cpp-ne 4.7.3,gcc_ntoarmv7le_cpp 4.7.3,gcc_ntoarmv7le_gpp 4.7.3,gcc_ntox86 (default) 4.7.3,gcc_ntox86_cpp-ne 4.7.3,gcc_ntox86_cpp 4.7.3,gcc_ntox86_gpp
编译arm的可执行文件: E:\share\learn\helloT>qcc -V 4.7.3,gcc_ntoarmv7le hello.c -o helloArm 我将a.out放到qnx虚拟机上,并将helloArm放到样机上,两者皆可正常运行。
test_macros
这一部分讨论测试宏,和qnx的关系不大。 怎样用gcc编译带测试宏的文件? 设定测试宏有两种方法,一个是用gcc的D选项,另一个是在文件中宏定义。 比如 (1) 在文件中宏定义
#define REST 1#include
等价于: 用gcc -D设定
#include
(2)
#define _POSIX_C_SOURCE 199506#include
等价于
#include
默认情况下:
#include
(Since glibc 2.10) The value 200809L or greater exposes definitions corresponding to the POSIX.1-2008 base specification (excluding the XSI extension).
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~