2016-04-23 1 views
2

J'écris mon tout premier programme à uefi usig tutoriel: http://www.rodsbooks.com/efi-programming/hello.html et j'ai un problème pour le compiler.UEFI bonjour erreur de compilation du monde

Voici mon makefile:

ARCH  = $(shell uname -m |sed s,i[3456789]86,ia32,) 
OBJ   = helloUEFI.o 
TARGET  = helloUEFI.efi 

EFIINC  = /usr/include/efi 
EFIINCS  = -I$(EFIINC) -I$(EFIINC)/$(ARCH) -I$(EFIINC)/protocol 
LIB   = /usr/lib 
EFILIB  = /usr/lib 
EFI_CRT_OBJS = $(EFILIB)/crt0-efi-$(ARCH).o 
EFI_LDS  = $(EFILIB)/elf_$(ARCH)_efi.lds 

CFALGS  = $(EFIINCS) -fno-stack-protector -fPIC -fshort-wchar -fmno-red-zone -Wall 
ifeq ($(ARCH),x86_64) 
    CFLAGS += -DEFI_FUNCTION_WRAPPER 
endif 

LDFLAGS  = -nonstdlib -znocombreloc -T $(EFI_LDS) -shared -Bsymbolic -L $(EFILIB) -L $(LIB) $(EFI_CRT_OBJS) 

all: $(TARGET) 

helloUEFI.so: $(OBJS) 
    ld $(LDFLAGS) $(OBJS) -o [email protected] -lefi -lgnuefi 

%.efi: %.so 
objcopy -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel -j .rela -j.reloc --target=efi-app-$(ARCH) $^ [email protected] 

et mon bonjour programme mondial:

#include <efi.h> 
#include <efilib.h> 

EFI_STATUS 
EFIAPI 

efi_main (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE* SydstemTable) { 
    InitializeLib(ImageHandle, SystemTable); 
    Print(L"Hello UEFI!\n"); 

    return EFI_SUCCESS; 
} 

message d'erreur:

ld -nonstdlib -znocombreloc -T /usr/lib/elf_x86_64_efi.lds -shared -Bsymbolic -L /usr/lib -L /usr/lib /usr/lib/crt0-efi-x86_64.o -o helloUEFI.so -lefi -lgnuefi 
ld: /usr/lib/crt0-efi-x86_64.o: relocation R_X86_64_PC32 against undefined symbol `efi_main' can not be used when making a shared object; recompile with -fPIC 
ld: final link failed 

je vérifierais chemin vers lib et comprend, et J'ajoute -fPIC à mes drapeaux de compilation et rien n'y fait.

Je vous serais reconnaissant de quelques conseils ce qu'il faut faire

Mes infos système:

Ubuntu 15.10 64 bits

+0

désolé mon erreur en question, missclick je veux dire que j'ai ajouté -fPCI, comme vous pouvez le voir dans makefile ci-dessus. –

Répondre

0

CFALGS doivent être orthographiés CFLAGS. Celui-ci m'obtient tout le temps.

Espérons que cela aide. Je l'aurais posté dans un commentaire mais je n'ai pas le représentant.

+0

C'est probablement l'une des raisons, d'autre part, elle devrait être -fpic -fPIC et LDFLAGS -nostdlib pas -nonstdlib. et -mno-red-zone pas -fmno-red-zone –