PDA

Просмотр полной версии : Проблема с функцией вывода часов на экран (с компиляцией)


frostegater
19.03.2011, 14:58
Уважаемые разработчики и просто понимающие люди, у меня к вам вопрос по использованию функции отображения часов в Homebrew.

Короче я пишу программу, почти все сделал (скоро выложу, когда уберу видимые баги) и вот меня заинтересовала функция вывода часов на экран (sceRtcGetCurrentClockLocalTime).

Все готово, но не компилится (sdk), выдает ошибку при компиляции эльфа. А именно не указывает ошибку а просто... при мейке =(


c:\>c:/pspsdk/bin/make
psp-gcc -I. -Ic:/pspsdk/psp/sdk/include -O2 -G0 -Wall -D_PSP_FW_VERSION=500 -L.
-Lc:/pspsdk/psp/sdk/lib -specs=c:/pspsdk/psp/sdk/lib/prxspecs -Wl,-q,-Tc:/pspsd
k/psp/sdk/lib/linkfile.prx main.o c:/pspsdk/psp/sdk/lib/prxexports.o -lpspdeb
ug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lc -lpspnet -lpspnet_inet -lpspnet_a
pctl -lpspnet_resolver -lpsputility -lpspuser -lpspkernel -o template.elf
main.o: In function `CurrentTime':
main.c:(.text+0x2c): undefined reference to `sceRtcGetCurrentClockLocalTime'
collect2: ld returned 1 exit status
make: *** [template.elf] Error 1

c:\>pause


Код программы я не буду выкладывать, вот на пример элементарная программа для просто вывода времени:




#include <pspkernel.h>
#include <stdio.h>
#include <psprtc.h>
#include <psphprm.h>

char *CurrentTime() {
char timeText[8];
pspTime rtime;
sceRtcGetCurrentClockLocalTime(&rtime);
snprintf(timeText, 8, "%i : %i" , rtime.hour , rtime.minutes);
return timeText;
}

PSP_MODULE_INFO("DisplayTime", 0, 1, 1);

PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

int main(int argc, char *argv[])
{


printf ( CurrentTime );

return 0;
}







TARGET = DisplayTime
OBJS = main.o

INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
LIBS = -lpsppower -lpsputility

LDFLAGS =

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = DisplayTime

PSP_FW_VERSION = 500
BUILD_PRX = 1

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak



Фуух... Как я замучился, помогите пожалуйста...

Yoti
19.03.2011, 15:17
А именно не указывает ошибку а просто
main.o: In function `CurrentTime':
main.c.text+0x2c): undefined reference to `sceRtcGetCurrentClockLocalTime'
А это что тогда?

frostegater
19.03.2011, 16:14
Yoti,
main.o: In function `CurrentTime':
По моему это не часть ошибки... Просто начинает выполняться функция `CurrentTime'...
Хм... но тогда что бы это значило?

main.c:(.text+0x2c): undefined reference to `sceRtcGetCurrentClockLocalTime'

Неопределённая ссылка на sceRtcGetCurrentClockLocalTime, верно? Опять не понимаю, что это значит... а особенно: (.text+0x2c)...
С логами от сдк 2 раз сталкиваюсь =(

Yoti
19.03.2011, 16:34
Просто начинает выполняться функция `CurrentTime'...
Мне казалось, ты знаешь английский. Почему же не можешь прочесть "In function `CurrentTime'"?

Неопределённая ссылка на sceRtcGetCurrentClockLocalTime, верно? Опять не понимаю, что это значит...
Ага. Подумай.

(.text+0x2c)
В некоторых случаях компилятор указывает не строку в исходном файле, а относительное смещение в готовом elf. В данном случае это не критично, с какой частью кода нужно разбираться указано ранее.

frostegater
20.03.2011, 06:50
Мне казалось, ты знаешь английский. Почему же не можешь прочесть "In function `CurrentTime'"?

Ммм.. действительно. Английский знаю, но отличаюсь особой невнимательностью и пока неопытностью...

Короче у меня есть небольшие успехи...
Вобщем я запихнул char за intmain и перестало лагать при компиляции без использования в других функциях. Но как только я пытаюсь использовать char в функции printf() - сразу анологичная ошибка, но в другом смещении =( Буду думать... В следующих версиях проги может исполню отображение времени.

Да и вопрос. Зачем указывать относительное смещение в готовом elf, раз самого эльфа нет?

Yoti
20.03.2011, 14:27
Frostegater,
он есть, только в оперативной памяти.

ErikPshat
20.03.2011, 15:54
Эмм, относительное смещение вроде имеет размер + 0х8000, если прога работает в user-режиме, выделяемое для него стартовый область памяти.

frostegater
20.03.2011, 16:06
ErikPshat, у меня смещение 0x34... Да и в RAM я ничего не нашел =(

Yoti
20.03.2011, 17:02
ErikPshat,
в данном случае это не то. Совсем =)

Забейте уже, в логе текстом написано где и что не так.

frostegater
22.03.2011, 14:55
Yoti, тут такой попутный вопрос. Не знаешь ли как впихать дополнительный prx в eboot? И даже если я впихаю и подпишу будет ли работать? Я склоняюсь к тому, что нет, ведь это kernel? Верно?

Yoti
24.03.2011, 00:43
Знаю. Если подпишешь eboot update ключами - будет работать загрузка левых prx.

frostegater
24.03.2011, 01:40
Yoti, Это получается fake_np v9 писать? Ведь это он ключи тащит из Эбутов...

Yoti
24.03.2011, 19:36
Frostegater,
вполне хватает fakesign'а.

frostegater
25.03.2011, 03:23
Yoti, fakesign`а? А это что такое? :D Это ты предлагаешь ручками вытянуть ключи, вставить в Encrypter, скомпилить и подписать?

Yoti
25.03.2011, 21:37
Frostegater,
я предлагаю поступить так, как это успешно делали ранее. Хочешь придумать что-то новое - дерзай, но я за результат не в ответе.

frostegater
01.04.2011, 13:52
Yoti, ммм... нашол в чём проблема была с часами... Проблема в том, что я нужные либы не подгрузил :D... Не подскажешь какие нужны для этого либы? Или наведи хоть, я ведь знаю, что ты знаешь ;)

Yoti
03.04.2011, 01:06
Фиг знает. Ищи в доках от sdk.

frostegater
03.04.2011, 07:12
Yoti, ура!.. получилось.. прикрутил "-lpsprtc" либсю в мэйкфайле и всё заработало! Спасибо тебе огромное :)

Если кому нить надо, то вот исправленый мэйкфайл:


TARGET = DisplayTime
OBJS = main.o

INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
LIBS = -lpsppower -lpsputility -lpsprtc

LDFLAGS =

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = DisplayTime

PSP_FW_VERSION = 500
BUILD_PRX = 1

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

Frostegater добавил 03.04.2011 в 07:12
Я закрываю тему :)