Comment construire quand plusieurs fichiers source dans rootfs dans linux embarqué?

J’ai une application simple c

Fichier ctest.c

#include  #include "new.h" #include "new.c" int main() { switching(); return 0; } 

et j’ai ces fichiers new.c et new.h.

fichier new.h en tant que

 void switching(); 

et mon fichier new.c comme

 void switching(){ char grade ='B'; switch(grade){ case 'A': printf("Excellent\n"); break; case 'B': printf("Super\n"); break; case 'C': printf("Well done\n"); break; case 'D': printf("You passed\n"); break; case 'F': printf("Better try again"); break; default: printf("invalid grade"); break; } printf("your grade is %c \n",grade); } 

Lorsque j’essaie d’utiliser des commandes de construction dans mon outil Linux intégré pour comstackr et générer un fichier binary, la construction échoue et voici le fichier de création modifié pour l’application sur rootfs.

créer un fichier pour l’application Ctest:

 APP = Ctest # Add any other object files to this list below APP_OBJS = Ctest.o APP_OBJS += new.o all: build build: $(APP) $(APP): $(APP_OBJS) $(CC) $(LDFLAGS) -o $@ $(APP_OBJS) $(LDLIBS) 

Voici mon journal des erreurs pendant la compilation

  DEBUG: Executing shell function do_comstack NOTE: make -j 4 ERROR: oe_runmake failed aarch64-xilinx-linux-gcc --sysroot=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/sysroots/plnx_aarch64 -O2 -pipe -g -feliminate-unused-debug-types -fdebug-prefix-map=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/work/aarch64-xilinx-linux/Ctest/1.0-r0=/usr/src/debug/Ctest/1.0-r0 -fdebug-prefix-map=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/sysroots/x86_64-linux= -fdebug-prefix-map=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/sysroots/plnx_aarch64= -c -o Ctest.o Ctest.c aarch64-xilinx-linux-gcc --sysroot=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/sysroots/plnx_aarch64 -O2 -pipe -g -feliminate-unused-debug-types -fdebug-prefix-map=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/work/aarch64-xilinx-linux/Ctest/1.0-r0=/usr/src/debug/Ctest/1.0-r0 -fdebug-prefix-map=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/sysroots/x86_64-linux= -fdebug-prefix-map=/home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/sysroots/plnx_aarch64= -c -o new.o new.c new.c: In function 'switching': new.c:5:13: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration] printf("Excellent\n"); ^~~~~~ new.c:5:13: warning: incompatible implicit declaration of built-in function 'printf' new.c:5:13: note: include '' or provide a declaration of 'printf' new.c:24:5: warning: incompatible implicit declaration of built-in function 'printf' printf("your grade is %c \n",grade); ^~~~~~ new.c:24:5: note: include '' or provide a declaration of 'printf' Ctest.c:33:17: fatal error: new.h: No such file or directory #include "new.h" ^ compilation terminated. make: *** [: Ctest.o] Error 1 make: *** Waiting for unfinished jobs.... ERROR: Function failed: do_comstack (log file is located at /home/janani/projects/peta2017.1-zcu102/zcu102/petlnx_zcu102/build/tmp/work/aarch64-xilinx-linux/Ctest/1.0-r0/temp/log.do_comstack.19737) 

J’ai compris que je devais faire des changements dans le fichier make ou le fichier bitbake qui construit l’application, c’est-à-dire le fichier Ctest.bb. Si oui, quels sont les changements? Et j’utilise petalinux 2017.1

le fichier bitbake de l’application est

 # # This file is the Ctest recipe. # SUMMARY = "Simple Ctest application" SECTION = "PETALINUX/apps" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" SRC_URI = "file://Ctest.c \ file://new.c \ file://Makefile \ " S = "${WORKDIR}" do_comstack() { oe_runmake } do_install() { install -d ${D}${bindir} install -m 0755 Ctest ${D}${bindir} install -m 0755 new ${D}${bindir} } 

Comment puis-je donner le fichier new.h dans le fichier make ou dois-je changer le fichier bitbake?

Votre fichier Ctest.c inclut new.c , vous ne devriez donc pas essayer de construire new.o du tout. Supprimer la ligne

 APP_OBJS += new.o 

et

 install -m 0755 new ${D}${bindir} 

Vous ne fournissez pas le fichier new.h dans votre SRC_URI. Le changer en

 SRC_URI = "file://Ctest.c \ file://new.c \ file://new.h \ file://Makefile \ "