Msys2构建HelloWorld工程

更新时间:
2024-02-01
下载文档

Msys2构建HelloWorld工程

以最简单的HelloWorld.c为例,为您展示交叉编译的完整过程,方便为更复杂的项目奠定基础。

准备工作

  • 安装MSYS2
  • MinGW
  • RealEvo-IDE(仅需要IDE生成编译Base工程的参数信息)

操作步骤

具体操作步骤如下所示。

  1. 以Zyzq7000平台为例,通过RealEvo-IDE获取到该平台编译程序的参数数据。先使用RealEvo-IDE创建一个SylixOS Base工程,参数设置如下,完成创建。
  2. 编译工程,完成之后,在Console获取Zynq7000平台编译器、编译参数等信息,部分信息如下所示。
arm-sylixos-eabi-gcc -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=auto -mno-unaligned-access -fno-strict-aliasing \
-O2 -g1 -gdwarf-2 -Wall -fmessage-length=0 -fsigned-char -fno-short-enums   -fPIC -DSYLIXOS \
-I"E:/Workspace/base-zynq7000/libsylixos/SylixOS" -I"E:/Workspace/base-zynq7000/libsylixos/SylixOS/include" \
-I"E:/Workspace/base-zynq7000/libsylixos/SylixOS/include/network"  -MMD -MP -MF Release/dep/test/src/test.d \
-c src/test.c -o Release/obj/test/src/test.o
arm-sylixos-eabi-gcc -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=auto -nostdlib -Wl,-shared -fPIC -shared  \
Release/obj/test/src/test.o -L"E:/Workspace/base-zynq7000/libsylixos/Release" \
-L"E:/Workspace/base-zynq7000/libsylixos/Debug" -L"E:/Workspace/base-zynq7000/libcextern/Release" \
-L"E:/Workspace/base-zynq7000/libcextern/Debug" -L"E:/Workspace/base-zynq7000/libcextern/Release" \
 -lcextern -lvpmpdm -lm -lgcc -o Release/test
  1. 任意文件下创建并编写HelloWorld.c文件。

编辑HelloWorld.c,输入以下程序。

#include<stdio.h>
int main(int argc, char** argv)
{
    printf("Hello SylixOS!\n");
    return (0);
}
  1. 打开msys2终端,进入HelloWorld源码目录,参考Base工程编译参数和过程,对HelloWorld.c文件进行编译生成HelloWorld.o文件,然后进行连接,最终生成HelloWorld可执行文件。部署HelloWorld文件到Zyzq7000平台即可运行测试。
[root@sylixos:/root]# cd /apps/helloworld/
[root@sylixos:/apps/helloworld]# ls
HelloWorld
[root@sylixos:/apps/helloworld]# ./HelloWorld
Hello SylixOS!
[root@sylixos:/apps/helloworld]#

编译要点说明:

  • 编译命令

根据目标平台选择交叉编译器,这里使用的是arm编译器arm-sylixos-eabi-gcc。

  • 编译参数

SylixOS在不同平台下的编译参数有所不同,根据选择的硬件平台进行编写。具体编译参数可通过RealEvo-IDE编译Base程序时的打印信息获取。

arm-sylixos-eabi-gcc -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=auto -mno-unaligned-access -fno-strict-aliasing \
-O2 -g1 -gdwarf-2 -Wall -fmessage-length=0 -fsigned-char -fno-short-enums -fPIC -DSYLIXOS -c HelloWorld.c \
-o HelloWorld.o
  • 头文件路径

SylixOS系统头文件在Base工程下,编译时,需要使用 -I 参数指定相关路径。需要将所有的路径替换成自己电脑上Base工程实际路径。并且注意目录分割符号。

-I"D:/SylixOS_WS/test_driver/Base_ARM_A9_R_253/libsylixos/SylixOS" 
-I"D:/SylixOS_WS/test_driver/Base_ARM_A9_R_253/libsylixos/SylixOS/include" 
-I"D:/SylixOS_WS/test_driver/Base_ARM_A9_R_253/libsylixos/SylixOS/include/network" 
  • 链接

SylixOS在不同平台下的连接参数有所不同,根据选择的硬件平台进行编写。具体连接参数可通过RealEvo-IDE编译Base程序时的打印信息获取。

arm-sylixos-eabi-gcc -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=auto -nostdlib -Wl, \
-shared -fPIC -shared  HelloWorld.o  -lcextern -lvpmpdm -lm -lgcc -o HelloWorld
  • 库文件路径

连接时需要用到Base过程编译出的静态库和动态库,需要通过-L选项指明库路径。需要将所有的路径替换成自己电脑上Base工程实际路径。并且注意目录分割符号。

-L"D:/SylixOS_WS/test_driver/Base_ARM_A9_R_253/libsylixos/Release" 
-L"D:/SylixOS_WS/test_driver/Base_ARM_A9_R_253/libsylixos/Debug" 
-L"D:/SylixOS_WS/test_driver/Base_ARM_A9_R_253/libcextern/Release" 
-L"D:/SylixOS_WS/test_driver/Base_ARM_A9_R_253/libcextern/Debug" 
-L"D:/SylixOS_WS/test_driver/Base_ARM_A9_R_253/libcextern/Release"

总结

使用msys2编译SylixOS程序过程与Linux下交叉编译软件的方法基本一致,这里需要注意的是SylixOS特殊的编译链接参数,并需要先编译Base工程。

文档内容是否对您有所帮助?
有帮助
没帮助