2016-04-23 2 views
2

Я пишу свою первую программу для урока uefi usig: http://www.rodsbooks.com/efi-programming/hello.html и у меня есть проблема с его компиляцией.UEFI hello world compile error

Вот мой 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] 

и мой привет мир программа:

#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; 
} 

сообщение об ошибке:

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 

Я бы проверить путь к Lib и включает в себя, и Я добавляю -fPIC к моим флагам компиляции и ничего не помогает.

Я был бы признателен за некоторые советуют, что делать

Мои данные системы:

Ubuntu 15.10 64-бит

+0

извините мою ошибку в вопросе, missclick Я имею в виду, что я добавил -fPCI, как вы можете видеть в make-файле выше. –

ответ

0

CFALGS должны быть прописаны CFLAGS. Это меня все время.

Надеюсь, это поможет. Я бы разместил это в комментарии, но у меня нет репутации.

+0

Вероятно, это одна из причин, во-вторых, она должна быть -fpic не -fPIC и в LDFLAGS -nostdlib не -nonstdlib. и -норно-красная зона не-нефрно-красная зона –