2017-07-24 5 views
0

je une simple application cComment construire lorsque plusieurs fichiers sources dans rootfs en linux intégré?

fichier Ctest.c

#include <stdio.h> 
#include "new.h" 
#include "new.c" 

int main() 
{ 
    switching(); 
    return 0; 
} 

et j'ai les new.c et les fichiers new.h.

fichier new.h comme

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); 

    } 

Quand je tente d'utiliser des commandes de construction dans mon outil de Linux embarqué pour la compilation et la génération d'un binaire, bâtiment est échoué et voici mon fichier make modifié pour l'application sur rootfs.

Makefile 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 [email protected] $(APP_OBJS) $(LDLIBS) 

Voici mon journal d'erreur lors de la compilation

DEBUG: Executing shell function do_compile 
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 '<stdio.h>' 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 '<stdio.h>' 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: *** [<builtin>: Ctest.o] Error 1 
make: *** Waiting for unfinished jobs.... 
ERROR: Function failed: do_compile (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_compile.19737) 

je compris que je dois faire des changements dans le fichier makefile ou bitbake fichier construire l'application à savoir, Ctest.bb fichier Si oui, quels sont les changements? Et je suis en utilisant 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_compile() { 
     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 makefile ou dois-je modifier le fichier bitbake petalinux 2017,1

?

+0

La compilation se déroule-t-elle dans un répertoire autre que celui de la source? Si c'est le cas, 'CFLAGS + = - I/chemin/to/where/source/is' – Fox

+0

' .c' fichiers ne sont pas inclus, mais compilés séparément. S'il vous plaît obtenir les bases de droite; un livre C aidera beaucoup. – Olaf

Répondre

0

Votre fichier Ctest.c inclut new.c donc vous ne devriez pas essayer de construire . Supprimez 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. Changez-le en

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

Vous recommandez exactement la mauvaise chose. Les fichiers '.c' ne devraient pas être inclus dans d'autres fichiers. C'est une très mauvaise pratique. – Olaf

+0

@Olaf Je suis d'accord avec vous, ce n'est pas une bonne idée. Je répondais simplement à la question concernant le yocto. Je suis sûr que l'affiche progressera vers de meilleures implémentations en temps voulu. – meuh

+0

Je ne vois pas comment cela est lié à yocto. C'est la mauvaise approche, c'est tout. – Olaf