Я на самом деле разрабатываю приложение C на Android Studio, используя SDL 2, графическую библиотеку C. Но проблема не в самой библиотеке, а в #include
моих собственных файлов.
Я создал исходные файлы, в которые я поместил свои функции, я связал с ними заголовочные файлы с объявлениями функций. Но когда я вызываю функции из моего основного исходного файла, я получаю сообщение об ошибке:
error: undefined reference to 'draw_render_rectangle'
например.
Это не работает ни для одного из моих файлов или функций. Но это работает для SDL.
Итак, я пытаюсь #include
.
Основной исходный файл "main_graphics.c":
#include "main_graphics.h"
void disp_main_menu(int selected) {
POINT A, B;
A.x = 0;
A.y = 0;
B.x = WIDTH;
B.y = HEIGHT;
draw_render_rectangle(A, B, 70, 70, 70);
}
Основной заголовочный файл "main_graphics.h":
#ifndef ANDROID_GAME_MAIN_GRAPHICS_H
#define ANDROID_GAME_MAIN_GRAPHICS_H
#include "../SDL2/include/SDL.h"
#include "../SDL2/include/SDL.h"
#include "../SDL2_ttf/SDL_ttf.h"
#include "../SDL2_image/SDL_image.h"
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "graphics_mobile.h"
int WIDTH = 1080;
int HEIGHT = 1920;
void disp_main_menu(int selected);
#endif //ANDROID_GAME_MAIN_GRAPHICS_H
"graphics_mobile.c":
#include "graphics_mobile.h"
typedef struct point {int x,y;} POINT;
void draw_render_rectangle(POINT p1, POINT p2, Uint8 r, Uint8 g, Uint8 b)
{
SDL_Rect rectangle;
int xmin, xmax;
int ymin, ymax;
int i,j;
if (p1.x < p2.x) {xmin=p1.x; xmax=p2.x;} else{xmin=p2.x; xmax=p1.x;}
if (p1.y < p2.y) {ymin=p1.y; ymax=p2.y;} else{ymin=p2.y; ymax=p1.y;}
rectangle.x = xmin;
rectangle.y = HEIGHT - (ymax-ymin) - ymin;
rectangle.w = xmax-xmin;
rectangle.h = ymax-ymin;
SDL_SetRenderTarget(renderer, texture);
SDL_RenderDrawRect(renderer,&rectangle);
SDL_SetRenderDrawColor(renderer, r, g, b, 0x00);
SDL_RenderFillRect(renderer, &rectangle);
SDL_SetRenderTarget(renderer, NULL);
SDL_RenderCopy(renderer, texture, NULL, NULL);
}
"graphics_mobile.h"
#ifndef ANDROID_GAME_GRAPHICS_MOBILE_H
#define ANDROID_GAME_GRAPHICS_MOBILE_H
#include "main_graphics.h"
typedef struct point {int x,y;} POINT;
void draw_render_rectangle(POINT p1, POINT p2, Uint8 r, Uint8 g, Uint8 b);
#endif //ANDROID_GAME_GRAPHICS_MOBILE_H
Одна странность в том, что автозаполнение работает, когда я набираю функцию, она фактически распознает ее и сообщает мне в маленьком окне автозаполнения, что она определена в "graphics_mobile.h".
Может проблема в компиляторе?
Я попытался ndk-bundle_10e и ndk-bundle_16b, и я получаю ту же ошибку.