You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu LTS 20.04环境下graphics.h库settextstyle与setfillstyle函数失效问题及替代字体处理库咨询

问题原因与解决方案

为什么settextstyle和setfillstyle报「隐式函数声明」?

你用的这个graphics.h其实是一个模拟Turbo C图形API的非标准封装库,底层依赖老版本SDL和其他已被弃用的组件(比如你遇到的libesd0-dev)。这类库的核心目的是让旧Turbo C代码能在Linux上运行,但维护非常有限:

  • 要么是这个封装库根本没有实现settextstyle和setfillstyle这两个函数,头文件里自然也没有对应的声明;
  • 要么是头文件的声明缺失,导致编译器将这两个函数识别为「隐式声明」(C语言默认隐式声明的函数返回int,即便有实现也大概率类型不匹配,触发报错)。

你可以自行验证:打开系统里的graphics.h头文件(通常在/usr/include目录下),搜索这两个函数的名字,如果找不到声明,就说明这个库确实没支持它们。


替代方案:现代Linux图形库推荐

既然这个兼容库已经跟不上新版Ubuntu的环境,不如直接改用Linux生态下的标准图形库,以下是几个适合C语言开发的选项:

1. SDL2(最推荐,适合图形/游戏类应用)

SDL2是你之前安装的旧SDL的升级版本,是跨平台的多媒体库,有完整的文本渲染支持,能轻松设置字体、大小、颜色。

简单示例代码:

#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>

int main() {
    // 初始化SDL和字体库
    if (SDL_Init(SDL_INIT_VIDEO) != 0 || TTF_Init() != 0) {
        return 1;
    }

    // 创建窗口和渲染器
    SDL_Window* window = SDL_CreateWindow("Text Demo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, 0);
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

    // 加载字体(这里用系统自带的FreeSans字体,路径可能需要调整)
    TTF_Font* font = TTF_OpenFont("/usr/share/fonts/truetype/freefont/FreeSans.ttf", 24);
    SDL_Color textColor = {255, 255, 255, 255}; // 白色
    SDL_Surface* textSurface = TTF_RenderText_Solid(font, "Hello from SDL2!", textColor);
    SDL_Texture* textTexture = SDL_CreateTextureFromSurface(renderer, textSurface);

    // 渲染文本
    SDL_Rect textRect = {50, 50, textSurface->w, textSurface->h};
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); // 黑色背景
    SDL_RenderClear(renderer);
    SDL_RenderCopy(renderer, textTexture, NULL, &textRect);
    SDL_RenderPresent(renderer);

    // 等待用户关闭窗口
    SDL_Event e;
    while (SDL_WaitEvent(&e)) {
        if (e.type == SDL_QUIT) break;
    }

    // 清理资源
    SDL_DestroyTexture(textTexture);
    SDL_FreeSurface(textSurface);
    TTF_CloseFont(font);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    TTF_Quit();
    SDL_Quit();

    return 0;
}

编译命令:

gcc your_file.c -o your_file `sdl2-config --cflags --libs` -lSDL2_ttf

2. GTK3/GTK4(适合桌面GUI应用)

GTK是Linux桌面环境的标准UI库,如果你要开发带按钮、菜单的桌面应用,GTK的文本控件(比如GtkLabel)可以通过CSS或API轻松设置字体样式和大小,上手也很方便。

3. Cairo(适合自定义2D图形渲染)

Cairo是专注于2D图形的渲染库,可以和X11、GTK等结合使用,支持高精度的文本渲染,适合需要手动绘制图形和文本的场景。


内容的提问来源于stack exchange,提问作者Justin Drew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:12:27