• [问题求助] arm-himix200-linux如何编写build.sh?有没有详细的参数说明。
    可能是因为是小白吧,这几天翻遍了论坛也没有搞的太清楚。抛开模型训练不谈,如何用arm-himix200-linux编译一个最简单的app demo上线到相机?
  • [openEuler] INTEL ICE驱动在openeuler22.03-LTS 环境上编译安装
    intel ice驱动1.9.11 版本在openeuler22.03-LTS  无法直接编译安装,需要按照以下步骤操作环境 openeuler22.03-LTS aarch641.intel官网下载驱动链接:https://downloadmirror.intel.com/738725/ice-1.9.11.tar.gz2.解压软件包tar -xvf ice-1.9.11.tar.gz3.cd ice-1.9.11/src替换这三个文件(文件在附件中)ice_ethtool.c ice_ptp.c 路径 ice-1.9.11/srcauxiliary_bus.h 路径 ice-1.9.11/src/linux4.cd ice-1.9.11/src5.make install6.查看新驱动 modinfo ice|more环境 openeuler22.03-LTS x86_641.intel官网下载驱动链接:https://downloadmirror.intel.com/738725/ice-1.9.11.tar.gz2.解压软件包tar -xvf ice-1.9.11.tar.gz3.cd ice-1.9.11/src替换这两个文件(文件在附件中)ice_ethtool.c  路径 ice-1.9.11/srcauxiliary_bus.h 路径 ice-1.9.11/src/linux4.cd ice-1.9.11/src5.make install6.查看新驱动 modinfo ice|more
  • [问题求助] make 编译Makefile,执行出现错误
  • [交流吐槽] 第三次
    [toc] ### 快速入门之Hello World ------ ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304532996354025.png) - #### **进程一:添加hello world源码文件** 1.新建my_app文件夹 ​ 在./applications/BearPi/BearPi-HM_ Nano/sample路径 下新建一个my_ app目录,用于存放业务源码文件。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304554700121365.png) 2.新建hello_world.c文件 ​ 在./applications/BearP/BearPi-HM_ Nano/sample/my_ app路径下新建一个hello_ _world.c文件,该文件为业务源码文件。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304575034888918.png) ---- 3.新增BUILD.gn文件 ​ 在./applications/BearPi/BearPi-HM_ Nano/sample/my_ app路径下新建一个BUILD.gn文件, 该文件为业务源码编译脚本。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304598742247574.png) - #### **进程二:编写Hello World业务代码** ​ 打印与有关,APP FEATURE INIT与“ohos_init.h”有关。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304660143868235.png) - #### 进程三:编写编译构建文件BUILD.gn 在/applications/BearPi/BearPi-HM/sample/my_ app 下的BUILD.gn文件中添加如下代码。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304682982916361.png) 在/applications/BearPi/BearPi-HM/sample下的BUILD.gn ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304708388216045.png) ​ 先屏蔽掉“B2_ basic button : button example ” ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304723295921657.png) - #### **进程四**:调试Hello World程序 进入MX,登录。直接输入hmp dist,编译失败。(原因:未进入文件) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304739655623095.png) 进入bundle.json,继续编译hmp dist,编译成功。 - #### **进程五:使用开发板** 电脑插上开发板,打开“电脑”-----“设备管理器”查看COM口,设置波特率921600,选择烧录文件(工程目录下out----BearPi-HM_Nano------选择Hi3861 wifliot app allinone.bin),勾选normal,点击connect,至此代码烧录完毕,led闪烁。 **串口工具看现象** 执行下图操作后,按开发板上复位按键即可。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304763295221766.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304784723765338.png) ### HarmonyOS编译框架介绍 ------ - #### ninji编译工具简介 在Unix/Linux下通常使用Makefile来控制代码的编译,但是Makefile对于比较大的项目有时候会比较慢,Google的程序员在开发Chrome的时候因为受不了Makefile的速度,自己重新开发出来一套新的控制编译的工 具叫作Ninja, Ninja相对于Makefile这套Makefile具更注重于编译速度。除了Chrome现在还有一些其他的比较大的项目也在开始使用Ninja。 - #### 如何编译模块 用vs code访问服务器操作如下: 终端——新终端——输入用户名 登录名@地址——输入密码——进入源码目录——编译(hpm dist) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304845501820808.png) ​ 后边听不懂了。。。。。。。。。。。 ### HarmonyOS CMSIS接口简介 ------ #### 什么是CMSIS-RTOS2接口? CMSIS是Cortex微控制器软件接口标准(Cortex Microcontroller Software Interface Standard)是ARM和一些编译器厂家以及半导体厂家共同遵循的一套标准,是由ARM专门]针对Cortex-M系列提出的标准。在该标准的约定下,ARM和芯片厂商会提供- -些通用的API接口来访问Cortex内核以及一 些专用外设,以减少更换芯片以及开发工具等移植工作所带来的金钱以及时间上的消耗。CMSIS-RTOS2 (CMSIS-RTOS API Version 2)是Arm⑧Cortex⑧-M处理器的通用的RTOS接口。为需要RTOS功能的软件组件提供了标准化的API。DCMSIS-RTOS2是一个通用的API,它与底层的RTOS内核无关,写应用程序的程序员在用户代码中调用CMS] S-N,RTOS2 API函数,可以更方便地将应用程序从-个RTOS到另一个RTOS,使用CMSIS-RTOS2 API的中间件也可以避免很多不必要的移植工作。 #### 鸿蒙与CMSIS-RTOS2接口联系 鸿蒙在CMSIS- RTOS2接口中封装了LiteOS- m的内核代码 最新CMSIS-RTOS2实现://kernel/liteos m/kal/cmsis/cmsis liteos2.c ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304890367880204.png) 上层应用或中间键要使用用内核的功能的话,我们通过调用CMSIS-RTOS API v2来实现对内核功能的调用。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304899234431165.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304909322613642.png) #### 如何使用CMSIS-RTOS2接口? ------ 1、在业务代码中包含"cmsis_ os2.h“ 2、通过调用"cmsis_ os2.h"中的API函数使用系统相关功能 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658304952624415766.png) ### HarmonyOS内核开发一任务管理(上) ------ #### 1.任务管理简介 基本概念 1、从系统的角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间 等系统资源,并独立于其它任务运行。 2、LiteOS的任务模块可以给用户提供多个任务,实现了任务之间的切换和通信,帮助用户管理业务程序 流程。这样用户可以将更多的精力投入到业务功能的实现中。 3、LiteOS中的任务 是抢占式调度机制,高优先级的任务可打断低优先级任务,低优先级任务必须在高 优先级任务阻塞或结束后才能得到调度,同时支持时间片轮转调度方式。 4、LiteOS的任务默认有32个优先级(0-31),最高优先级为0,最低优先级为31。(具体有多少个,可以进 行配置) #### 2.任务相关概念 **任务状态** 任务状态通常分为以下四种: **就绪**(Ready) :该任务在就绪列表中,只等待CPU。 **运行**(Running) :该任务正在执行。 **阻塞**(Blocked) :该任务不在就绪列表中。包含任务被挂起、任务被延时、任务正在等待信号量、读写队 列或者等待读写事件等。 **退出态**(Dead) :该任务运行结束,等待系统回收资源。 ------ **任务ID**:在任务创建时通过参数返回给用户,作为任务的- -个非常重要的标识。 **任务优先级**:优先级表示任务执行的优先顺序。 **任务入口函数**:每个新任务得到调度后将执行的函数。 **任务控制块TCB**:每一个任务都含有一个任务控制块(TCB)。TCB包含了任务上下文栈指针(stack pointer)、 任务状态、任务优先级、任务ID、 任务名、任务栈大小等信息。TCB可以反映出每个任务运行情况。 **任务栈**:每- -个任务都拥有一一个独立的栈空间,我们称为任务栈。 **任务上下文**:任务在运行过程中使用到的-些资源,如寄存器等,我们称为任务上下文。LiteOS在任务挂起的时候会将本任务的任务上下文信息,保存在自己的任务栈里面,以便任务恢复后,从栈空间中恢复挂起时的上下文信息,从而继续执行被挂起时被打断的代码。 **任务切换:**任务切换包含获取就绪列表中最高优先级任务、切出任务上下文保存、切入任务上下文恢复等动作。 #### 3.任务的调度机制 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658305005523418613.png) #### 4.实现任务的管理 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658305017253858070.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658305030019986088.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/20/1658305041625618438.png) **Attention:①先创建的任务先运行②改完代码要在MS编译(同快速入门Hello World进程四)**
  • [技术干货] 第三讲:手把手带你使用代码迁移工具实现源码迁移笔记
    本课程通过两个开源项目深度解析如何使用鲲鹏代码迁移工具进行迁移实战。学习完本课程后你能够:① 了解跨平台软件迁移的背景知识 。② 了解鲲鹏源码迁移流程和实战技巧 。③ 掌握鲲鹏代码迁移工具的使用方法 。一、源码迁移介绍       背景介绍       在国产替代的大背景下,鲲鹏计算平台是一个非常有潜力的产业。为了解决开发者在x86平台应用向鲲鹏平台移植的过程中遇到的一系列的痛点问题,华为推出了鲲鹏代码迁移工具(Porting Advisor),帮助开发者加速将x86环境下的应用迁移至鲲鹏平台。本文根据华为鲲鹏计算工具链项目组的工具化软件迁移经验,总结了鲲鹏代码迁移工具的实际使用经验,期望能帮助开发者了解如何使用该工具,提高开发者的软件迁移效率。       工具支持的功能特性:功能描述源码迁移检查用户C/C+ +/Fortran/Go/汇编等软件构建工程文件,并指导用户如何迁移该文件。检查用户C/C+ +/Fortran/Python/Java/Scala/Go/汇编等软件源码,并指导用户如何迁移该源码文件。x86汇编指令转换,分析x86汇编指令,并转换成功能对等的鯤鹏汇编指令。内存一致性检查内存一致性检查是分析、 修复用户软件中存在的内存读写顺序问题。64位运行模式检查64位运行模式检查功能可以检查和分析原32位平台 上的软件源代码,将源码迁移至64位平台时需要修改的地方识别出来。结构体字节对齐检查结构体字节对齐检查功能可以检查源码中结构体类型变量的字节对齐情况, 用户可以根据检查结果判断是否需要进行字节对齐所需要的。软件迁移评估检查用户软件安装包(RPM、 DEB、 TAR. ZIP、GZIP文件等)中包含的SO (Shared Object)依赖库和可执行文件,并评估SO依赖库和可执行文体的可迁移性。 检查用户Java类软件包JAR、WAR)中包含的SO依赖库和进制文件,并评估SO依赖库和二进制文件的可迁移性。 检查指定的用户软件安装路径下的SO依赖库和可执行文件,并评估SO依赖库和可执行文件的可迁移性。 软件包重构在鲲鹏平台上,分析用户提供的x86平台rpm格式或deb格式的软件包构成, 重构并生成鲲鹏平台兼容的对应格式软件包。 专项软件迁移在鯤鹏平台上,通过自动化方式,对部分常用的解决方案组件,进行x86源码修改、编译并构建生成鲲鹏平台兼容的软件包。        源码迁移介绍       当用户能够提供源代码进行迁移分析时,可以使用源码迁移功能完成迁移工作。源码迁移功能主要解决了用户的代码兼容性人工排查困难、严重依赖迁移的个人经验、需要反复依赖编译调错定位导致执行效率低等痛点。按照源代码到二进制文件的翻译方式的不同,代码迁移工具将编程语言分为两类:一类是编译型,一类是解释型。迁移工具整体界面二、实战项目一        开源软件smartdenovo-master迁移实战前提条件1.服务器和操作系统正常运行。2.PC端已经安装SSH远程登录工具。3.Porting Advisor已在准备好的x86平台环境和鲲鹏平台环境中完成安装并正常运行。4.待迁移的相关软件包、源代码已准备就绪。迁移计划1.利用Porting Advisor的源码迁移功能对获取到的smartdenovo源代码进行扫描,获取其SO库依赖关系、可迁移性、迁移工作量等分析结果。2.根据Porting Advisor的源码迁移功能分析得到的smartdenovo依赖关系去准备对应的S0库。3.检查smartdenovo源代码的源代码分析报告,获取编译构建文件、.h/.c等源代码文件的修改建议,并根据修改建议进行修改。4.用修改后的源代码进行编译,生成鲲鹏版本的smartdenovo软件。5.使用鲲鹏版本的smartdenovo软件进行部署和简单的验证。远程登录工具登上服务器我们申请远程实验室已经具备以下要求进入到迁移工具平台进行登录操作步骤步骤1:从https://github.com/ruanjue/smartdenovo下载获取待使用的软件源码包smartdenovo-master.zip。步骤2:进入Porting Advisor“源码迁移”菜单进行扫描分析。在随后出现的相关配置项和按钮中,单击“上传”,上传前面下载到的smartdenovo-master.zip,并点中输入框,            选择源码包为”smartdenovo-master"。其它几个选项根据我们实际的情况进行选择如图所示       选择好对应的类型点击开始分析等待十几秒之后分析完成如下图所示     在“源码迁移建议"页面,查看Makefile文件的修改建议,如下图迁移建议所示       根据以上建议,Makefile文件中需要给CFLAGS变量增加选项内容 "-march=armv8-a-fsigned-char”,同时,还需要删除CFLAGS变量中的选项”-mpopcnt"和"-msse3”。修改后的代码(修改时进行了x86 _64分支和aarch64分支的区分处理),如下图修改后的makefile所示。迁移后重新编译步骤1:在完成对Makefile和ksw.c的修改后,可以将修改过的整份源代码下载到鲲鹏环境中,执行make clean && make命令,完成编译动作,第一个是列出文件信息,第二个是make命令步骤2:将smartdenovo-master下载到本地之后,清理掉本地目录smartdenovo-master中工具生成的中间文件Makefile.20210104220958.bak.0 ksw.c20210104220958.bak.0.步骤3:柠本地目录smartdenovo-master上传到鯤鹏服务器上,执行编泽安装动作。步骤4:Make成功后,可以执行make install命令执行交装,并检查交装结果迁移后重新编译,查看编译结果。运行程序,查看回显信息。三、实战项目二         开源软件dl_poly迁移实战前提条件:1服务器和操作系统正常运行。2.pC端己经安装sSH远程登录工具。3.Porting Advisor己在准备好的x86平台环境和鲲鹏平台环境中完成安装井正常运行。4.待迁移的相关软件包、源代码已准备就绪。步骤1从https://gitlab.com/DL_POLY_Classic/dl_poly/-/archive/RELEASE-1-10/d1_poly-RELEASE-1-10.tar.gz下载获取待使用的软件源码包。步骤2上传dl_poly_RELEASE-1-10.tar.gz源码包步骤3执行命令进入解压后的目录cd dl_poly-RELEASE-1-10/source步骤4拷贝Makefilecp../build/MakePAR./Makefile步骤5更改文件属主chown porting:porting Makefile步骤6执行扫描过程。扫描根路径选择Makefile文件所在的source路径,类型勾选上Fortran图1所示步骤7查看扫描结果图2所示图1图2        和上述一样在“源码迁移建议"页面,查看文件的修改建议,如下图迁移建议所示       按照扫描建议在第59行和65行的FFLAGS后添加“-march=armv8.2-a-mtune=tsv110 -ffree-line-length-none -cpp -std=legacy”改好之后保存,保存之后建议改的代码就改完了 迁移后重新编译步骤1执行命令进行编译安装cd/opt/portadv/portadmin/sourcecode/dI_poly-RELEASE-1-10/source/make dipoly步骤2执行以下命令设置DL_POLY环境变量。export PATH=/opt/portadv/portadmin/sourcecode/dlpoly-RELEASE-1-10/execute:$PATH步骤3执行命令查看成功安装DL_POLYwhich DLPOLY.X步骤4显示的信息如图3则安装成功。如图3所示 图3总结       本次软件迁移实战中,通过对软件迁移过程的完整模拟,覆盖了用户利用代码迁移工具对迁移过程进行前期分析、中期修改和后期编译、重构、验证的过程。在其它软件的迁移中,可以参考本实践的思路和操作过程进行操作。
  • [技术干货] vscode调试makefile管理的c++工程
    第一步创建工程目录如下:其中main.cpp#include<iostream>#include"solution.h"using namespace std;int main(int argc, char const *argv[]){    cout<<"hello world"<<endl;    Solution test;    test.play();      return 0;}solution.hclass Solution{private:    /* data */public:    void play();    Solution(/* args */);    ~Solution();};solution.cpp#include "solution.h"#include <iostream>void Solution::play(){    int a=3+4;    std::cout<<a<<std::endl;}Solution::Solution(){}Solution::~Solution(){}第二步:创建Makefile文件OBJS := main.o solution.oCC := g++main : $(OBJS)    $(CC)  -o $@ $^#-g 添加gdb调试信息 ,-c 只编译不连接 只⽣成⽬标⽂件 .o⽂件%.o: %.cpp    $(CC)  -g -c -o $@ $^ clean:    rm -rf *.o main第三步创建task.json文件从菜单栏选择Terminal>Configure Default Build Task, 在下拉栏里选择C/C++: g++ build active file. 这会生成tasks.json文件。{    "tasks": [        {            "type": "cppbuild",            "label": "g++ build active file",            "command": "make",                 //主要这里是make命令            "args": [                "-C",                "${workspaceFolder}",                "main"            ],            "options": {                "cwd": "${fileDirname}"            },            "problemMatcher": [                "$gcc"            ],            "group": "build",            "detail": "调试器生成的任务。"        },        { //删除二进制文件            "type": "shell",                      "label": "delete output file",                      "command": "make",          //这个是make clean 命令                      "args": [                "clean"            ],                      "presentation": {                      "reveal": "silent", //删除过程不切换终端(专注程序输出)                      }                  }    ],    "version": "2.0.0"}第四步:创建launch.json文件选择debug>add Configuration内容如下:{    // Use IntelliSense to learn about possible attributes.    // Hover to view descriptions of existing attributes.    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387    "version": "0.2.0",    "configurations": [        {        "name": "g++ build and debug active file",        "type": "cppdbg",               "request": "launch",               "program": "${workspaceFolder}/main",               "args": [],               "stopAtEntry": false,               "cwd": "${workspaceFolder}",               "environment": [],               "externalConsole": false,               "MIMode": "gdb",               "setupCommands": [                {                "description": "Enable pretty-printing for gdb",                "text": "-enable-pretty-printing",                "ignoreFailures": true                }               ],               "preLaunchTask": "g++ build active file",      //这个必须要和task.json中的lable保持一致,前处理        "postDebugTask": "delete output file",         //这个必须要和task.json中的lable保持一致,后处理        "miDebuggerPath": "/usr/bin/gdb"             //运行环境中要安装gdb               }            ]}第五步debug调试:菜单栏中的run》start debugging
  • [技术干货] shell脚本编程Makefile的使用(转)
    通常在一个项目里,我们的规则是:1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。其实就是智能的识别哪些编译链接需要做,哪些不用做避免不必要的时间消耗只要我们的Makefile写得够好,我们只用一个make命令就可以完成,make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。target … : prerequisites …command……target:也就是一个目标文件,可以是ObjectFile,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,暂不叙述。prerequisites:要生成那个target所需要的文件或是目标。command:也就是make需要执行的命令。(任意的Shell命令)这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。hello_demo : hellospeak.o speak.o   //由hellospeak.o speak.o链接成目标hello_demo                                          gcc -o hello_demo hellospeak.o speak.o  //执行下面的命令                                hellospeak.o : hellospeak.c speak.h  //如果一些hellospeak.c的函数声明是在头文件speak.h中那么也得在这后面加上                                                 gcc -c hellospeak.c                                                speak.o : speak.c  speak.h                                                          gcc -c speak.c                                                    clean :                                                                          rm hello_demo speak.o  hellospeak.o  //当执行make clean时就会执行这个语句 //speak.h#include<stdio.h>#include<stdlib.h>void helloSpeak();--------------------------------------------------------------    //speak.c#include"speak.h"void helloSpeak(){ printf("Hello Makefile\n");}--------------------------------------------------------------    //main.c#include"speak.h"int main(){  helloSpeak();  return 0;}   --------------------------------------------------------------//MakefileHello: main.o speak.o        gcc -o Hello  main.o speak.omain.o: main.c speak.h        gcc -c main.cspeak.o: speak.c speak.h        gcc -c speak.cclean:        rm Hello speak.o main.o ~
  • [问题求助] 【Atlas200DK】部署摄像头时,cmake命令生成makefile文件报错
    感谢点击与帮助。【功能模块】摄像头,采用的是树莓派V2.1【操作步骤&问题现象】cann的智能小车实验步骤参考的是:《智能系统与应用》课程方案_在线课程_华为云开发者学堂_云计算培训-华为云 (huaweicloud.com)部署摄像头时,用cmake命令生成makefile文件,makelists走第19行报错第19行代码块:if (NOT DEFINED ENV{INSTALL_DIR})    MESSAGE(FATAL_ERROR "Not Defined INSTALL_DIR")endif()最初认为是没有c++编译器导致的,但是使用--version命令可以查询到camke gcc g++的版本,cmake的版本3.10.2也满足cmakelist的要求【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] libreoffice执行make编译去除不能直接用root账号编译方法
    【问题描述】在对应libreoffice源码进行编译时,直接执行make会返回错误并直接终止编译,如下图所示:No. You make ME a sandwich.Building LibreOffice as root is a very bad idea, use a refular user.【解决方法】修改Makefile和Makefile.in文件(相同修改):1、将“.PHONY : ”开头行中的“check-of-root”字符串删除(不同版本对应字符串不完全相同,只需删除“check-of-root”字符串,其他不变)修改前修改后2、将“bootstrap: ”开头行中的“check-of-root”字符串删除修改前修改后修改后:wq!保存退出,再次执行make即可使用root进行正常编译。
  • [问题求助] Mail-SpamAssassin-3.4.6 执行 perl Makefile.pl 失败
    【功能模块】【操作步骤&问题现象】1、编译安装Mail-SpamAssassin-3.4.6,已执行① wget https://mirrors.tuna.tsinghua.edu.cn/apache//spamassassin/source/Mail-SpamAssassin-3.4.6.tar.gz  ② tar -xvzf Mail-SpamAssassin-3.4.6.tar.gz    ③ cd Mail-SpamAssassin-3.4.6  ④ yum -y install perl-Digest-MD5     yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker2、执行 perl Makefile.PL  报错,参考文档 https://blog.csdn.net/sdfshfh/article/details/86701334【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【ARM CENTOS7.9】【jq-1.6编译】拉取源码后生成makefile后,执行make报错
    【功能模块】jq1.6编译问题【操作步骤&问题现象】#下载源码git clone https://github.com/stedolan/jq.git cd jqgit checkout jq-1.6#生成makefile.in文件 autoreconf -fi      #生成makefile./configure --with-oniguruma=builtin#编译make拉取源码后生成makefile后,执行make报错【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] Linux系统编程——makefile
    一、目标1、了解makefile的基本概念和基本结构;2、初步掌握编写简单makefile的方法、利用GNU Make编译应用程序的方法;二、步骤(一)简单的makefile文件的使用(1)用vi 创建5个程序文件:①/*main.c*/    #include <stdio.h>     #include "mytool1.h"    #include "mytool2.h"    int main()    {     mytool1_print("hello,mytool1!");     mytool2_print("hello,mytool2!");     return 0;    }             ②/*mytool1.c*/    #include "mytool1.h"    void mytool1_print(char *print_str)    {     printf("This is mytool1 print : %s ",print_str);    }     ③/*mytool1.h*/    #ifndef _MYTOOL_1_H    #define _MYTOOL_1_H     void mytool1_print(char *print_str);    #endif     ④/*mytool2.c*/    #include "mytool2.h"    void mytool2_print(char *print_str)    {     printf("This is mytool2 print : %s ",print_str);    }    ⑤/*mytool2.h*/    #ifndef _MYTOOL_2_H    #define _MYTOOL_2_H     void mytool2_print(char *print_str);    #endif(2)创建一个如下内容的makefile文件(注:命令行中的前面的空位是按TAB键生成的)。main: main.o mytool1.o mytool2.ogcc -o main main.o mytool1.o mytool2.omain.o: main.cgcc -c main.cmytool1.o: mytool1.c mytool1.hgcc -c mytool1.cmytool2.o: mytool2.c mytool2.hgcc -c mytool2.c如下图所示:(3)在命令窗口输入命令make,执行makefile进行编译,如下图:(4)执行最终生成的程序(5)再次执行make,结果失败因为makefile中要生成的文件已存在目录中(二)makefile中变量的使用(1)将makefile文件另存一个备份后,修改为如下内容:# makefile test for hello programOBJS = main.o mytool1.o mytool2.oCC = gccmain: $(OBJS)       $(CC)  $(OBJS) -o mainmain.o: main.c       $(CC) -c main.cmytool1.o: mytool1.c mytool1.h       $(CC) -c mytool1.cmytool2.o: mytool2.c mytool2.h       $(CC) -c mytool2.c(2)删除当前目录下的所有.o文件后,重新执行make(三)自动变量及隐式规则的使用(1)将makefile文件备份后,修改为如下内容:# makefile test for hello programOBJS = main.o mytool1.o mytool2.oCC = gccmain: $(OBJS)$(CC)  $^ -o $@main.o: main.c$(CC) -c $< -o $@mytool1.o: mytool1.c mytool1.h$(CC) -c $< -o $@mytool2.o: mytool2.c mytool2.h$(CC) -c  $< -o $@ (2)删除当前目录下的所有.o文件后,重新执行make
  • [问题求助] 【VScode】【项目编译出错】make: *** [Makefile:149: build/Huawei_LiteOS.elf
    【功能模块】collect2.exe: error: ld returned 1 exit statusmake: *** [Makefile:149: build/Huawei_LiteOS.elf] Error 1exit code=2[2021/4/5 21:45:04] 编译失败。【操作步骤&问题现象】1、依照视频教程编写编译代码,编译失败2、【截图信息】【日志信息】(可选,上传日志内容或者附件)vscode日志和工程已上传附件
  • [问题求助] zip软件包的crc32函数迁移成鲲鹏指令后该如何设置Makefile进行编译安装?
    目标是使用ARM64平台的crc32cb、crc32ch、crc32cw、crc32cx4个汇编指令来优化zip软件包的crc32计算函数,代码修改完成后单独测试该文件时使用gcc编译要添加“-march=armv8-a+crc”编译选项,但是在编译安装zip整个包时要按照原Makefile内容进行编译,不能直接添加该编译选项,请问该怎么修改Makefile文件,或者该怎么做才能成功编译安装该软件包的优化版本?【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] [LiteOS移植]目标芯片STM32F1 修改Makefile
    什么是MakefileMakefile是一个名为GNU-Make软件所需要的脚本文件,该脚本文件可以指导Make软件控制arm-gcc等工具链去编译工程文件最终得到可执行文件,几乎所有的Linux发行版都内置了GNU-Make软件,VScode等多种IED也内置了Make程序。你见到的xxx.mk文件或者Makefile都统称为Makefile脚本文件。Makefile脚本文件的语法学习可以参考:https://www.gnu.org/software/make/manual/make.html (GNU make官方文档)https://seisman.github.io/how-to-write-makefile/overview.html (跟我一起写Makefile 陈皓)SDK和工程中的Makefile结构https://bbs.huaweicloud.com/blogs/195973 请参考这篇博客。修改Makefile脚本文件一共有三个Makefile文件需要进行修改,分别为targets\STM32F103RC\GCC\Makefile、 targets\STM32F103RC\GCC\project.mk和targets\STM32F103RC\.config修改MakefileSTM32F103不支持硬件浮点运算,并且为m3内核,我们需要修改第83行,将CPU = -mcpu=cortex-m4修改为CPU = -mcpu=cortex-m3,85行FPU变量后的值删除,87行FLOAT-ABI变量后的值删除,如下图所示。修改project.mk将HAL_DRIVER_SRC变量后我们没有使用的库文件路径删除,并将STM32L4修改为STM32F1,如果不确定有没有使用可以选择保留不影响使用,这里我移除了IIC、SPI等相关的库文件路径,注意:“\”为接续符,最后是没有接续符的。将HARDWARE_SRC变量后的路径删除,因为我们没有使用LCD和一些该目录下代码所对应的硬件,如果你使用了外设(OLED、网卡、DHT11等等),你可以把他们的初始化代码所在路径添加到这里,让make软件能找到他们并编译,修改后如下图所示。将HAL_DRIVER_SRC_NO_BOOTLOADER变量后的路径删除,我们并未使用DMA、RNG,修改后如下图所示。     将后的USER_SRC变量后的$(TARGET_DIR)/Src/Huawei_IoT_QR_Code.c、$(TARGET_DIR)/Src/spi.c 、$(TARGET_DIR)/Src/i2c.c 删除,system_stm32l4xx修改为system_stm32F1xx,stm32l4xx_it修改为stm32F1xx_it,添加上$(TARGET_DIR)/Src/stm32f1xx_hal_msp.c,如果你也有其他的用户逻辑代码可以添加在这里,修改后如下图所示。将HAL_DRIVER_INC变量后的路径中的L4修改为F1,如下图所示。移除HARDWARE_INC变量后的路径,修改后如下图所示。       将C_DEFS后的STM32L431xx修改为STM32F103xx如下图所示。       未提及的地方均不用修改。修改.config       .config暂不用修改,可以等后期全部一直完成后,通过IoT Link Studio中的图形化界面进行配置并自动修改即可。
总条数:27 到第
上滑加载中