У меня есть файл с некоторым кодом, и он ссылается на библиотеку (#include <<em> lib >).Я создал makefile с nspire-tools new (file) и скомпилировал файл (colors.c) с командой make в терминале.Ошибки об отсутствующих ссылках / библиотеках выбрасываются, и это не создает скомпилированные файлы (которые являются .elf, .o, .prg.tns и .tns).
user@user-System-Product-Name:~/Ndless/ndless-sdk/samples/colors$ make
nspire-gcc -Wall -W -marm -Os -c colors.c -o colors.o
colors.c: In function ‘main’:
colors.c:6:2: warning: implicit declaration of function ‘lcd_incolor’; did you mean ‘lcd_init’? [-Wimplicit-function-declaration]
lcd_incolor();
^~~~~~~~~~~
lcd_init
In file included from /home/rico/Ndless/ndless-sdk/bin/../include/os.h:24,
from colors.c:1:
/home/rico/Ndless/ndless-sdk/bin/../include/libndls.h:164:95: error: expected ‘;’ before ‘}’ token
ASE_ADDRESS ({"SCREEN_BASE_ADDRESS got removed in favor of the lcd_blit API."})
^
colors.c:7:37: note: in expansion of macro ‘SCREEN_BASE_ADDRESS’
volatile unsigned char *scr_base = SCREEN_BASE_ADDRESS;
^~~~~~~~~~~~~~~~~~~
/home/rico/Ndless/ndless-sdk/bin/../include/libndls.h:164:30: warning: pointer targets in initialization of ‘volatile unsigned char *’ from ‘char *’ differ in signedness [-Wpointer-sign]
#define SCREEN_BASE_ADDRESS ({"SCREEN_BASE_ADDRESS got removed in favor of the lcd_blit API."})
^
colors.c:7:37: note: in expansion of macro ‘SCREEN_BASE_ADDRESS’
volatile unsigned char *scr_base = SCREEN_BASE_ADDRESS;
^~~~~~~~~~~~~~~~~~~
colors.c:9:22: error: ‘SCREEN_BYTES_SIZE’ undeclared (first use in this function); did you mean ‘SCREEN_BASE_ADDRESS’?
unsigned scr_size = SCREEN_BYTES_SIZE;
^~~~~~~~~~~~~~~~~
SCREEN_BASE_ADDRESS
colors.c:9:22: note: each undeclared identifier is reported only once for each function it appears in
Makefile:30: recipe for target 'colors.o' failed
make: *** [colors.o] Error 1
Этот файл, который я собираю, является примером фрагмента кода, включенного в Ndless SDK, и я отложил другие файлы, которые были включены в этот один пример проекта, чтобы я мог протестировать компиляцию основногофайл.
Поскольку эти примеры уже были предварительно скомпилированы, я решил посмотреть, помещает ли исходный файл .o в ту же папку, где находится мой файл .c.Я скомпилировал с помощью той же команды, упомянутой выше, и не было выдано фатальных ошибок (просто были выданы ошибки misc api).
user@user-System-Product-Name:~/Ndless/ndless-sdk/samples/colors$ make
mkdir -p .
nspire-ld colors.o -o colors.c.elf
genzehn --input colors.c.elf --output colors.c.tns.zehn --name "colors.c"
Warning: Your application does not appear to support 240x320px displays!
If it does, override with '--240x320-support true'.
make-prg colors.c.tns.zehn colors.c.tns
rm colors.c.tns.zehn
Похоже, что предотвращенный файл .o сделал сделать обходить создание нового файла .o и вместо этого продолжать создавать другие файлы?Как я могу исправить эти ошибки и сгенерировать необходимые файлы только из colors.c?
colors.c :
#include <os.h>
int main(void) {
if (!has_colors)
return 0;
lcd_incolor();
volatile unsigned char *scr_base = SCREEN_BASE_ADDRESS;
volatile unsigned char *ptr;
unsigned scr_size = SCREEN_BYTES_SIZE;
// See http://en.wikipedia.org/wiki/High_color -> "16-bit high color" for the encoding of the screen buffer
for (ptr = scr_base; ptr < scr_base + scr_size / 3; ptr += 2)
*(volatile unsigned short*)ptr = 0b1111100000000000;
for (; ptr < scr_base + scr_size * 2 / 3; ptr += 2)
*(volatile unsigned short*)ptr = 0b0000011111100000;
for (; ptr < scr_base + scr_size; ptr += 2)
*(volatile unsigned short*)ptr = 0b0000000000011111;
wait_key_pressed();
return 0;
}