【问题标题】:Why can't I call this SDL2_gfxPrimitives function?为什么我不能调用这个 SDL2_gfxPrimitives 函数?
【发布时间】:2016-01-23 16:34:55
【问题描述】:

使用 SDL2 库启动一个窗口并在黑色背景上绘制一个彩色方块,我没有遇到任何问题。但是当我尝试使用 SDL2_gfx 库来绘制一个圆圈时,filledCircleColor() 是未定义的:

make build;
make[1]: Entering directory `/home/mike/compile/sdlTest'
gcc -std=c99 -c sdlTest.c;
gcc sdlTest.o -o sdlTest -I/usr/include/SDL2 -lSDL2;
sdlTest.o: In function `main':
sdlTest.c:(.text+0x176): undefined reference to `filledCircleColor'
collect2: error: ld returned 1 exit status
make[1]: *** [build] Error 1
make[1]: Leaving directory `/home/mike/compile/sdlTest'
make: *** [test] Error 2

我做错了什么?

这是我的 C:

#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL2_gfxPrimitives.h>


SDL_Event event;

//SDL2 variables
void* nullptr;
SDL_Window *win;
SDL_Renderer *ren;

int main(void) {
    if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
        printf("SDL_Init Error: %s\n", SDL_GetError());
    }

    win = SDL_CreateWindow("sdlTest", 100, 100, 10*32, 10*32, SDL_WINDOW_SHOWN);
    if (win == nullptr) {
        printf("SDL_CreateWindow Error: %s\n", SDL_GetError());
    }

    ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if (ren == nullptr) {
        printf("SDL_CreateRenderer Error: %s\n", SDL_GetError());
    }

    SDL_SetRenderDrawColor(ren, 0, 0, 0, 255);
    SDL_RenderClear(ren);


    SDL_Rect rect;
    rect.x = 20;
    rect.y = 20;
    rect.w = 10;
    rect.h = 10;

    SDL_SetRenderDrawColor(ren, 0, 0, 255, 255);
    SDL_RenderFillRect(ren, &rect);


    filledCircleColor(ren, 50, 50, 50, 0xFF0000FF);

    SDL_RenderPresent(ren);

    while(1) { ; }
}

这是我的 Makefile:

test:
    make build;
    make run;

build:
    gcc -std=c99 -c sdlTest.c;
    gcc sdlTest.o -o sdlTest -I/usr/include/SDL2 -lSDL2;

run:
    ./sdlTest;

clean:
    -rm sdlTest;
    -rm *.o;
    -rm *~

我在 Linux 机器上。感谢您的帮助!

【问题讨论】:

  • 也许链接-lSDL_gfx?不确定,但看起来你没有链接图书馆

标签: c gcc sdl-2


【解决方案1】:

您需要通过添加-lSDL2_gfx 选项告诉链接器您正在使用SDL2_gfx 扩展:

gcc sdlTest.o -o sdlTest -lSDL2 -lSDL2_gfx;

注意-I 标志在这里是多余的,因为您处于链接阶段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 2012-05-22
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多