2016-04-10 3 views
0

Я пытаюсь скомпилировать следующий код, но он дает мне сообщение об ошибке, как показано ниже. Я новичок в графике linux c и не могу понять это. Может ли кто-нибудь предложить решение?Как решить следующую ошибку в программе Linux Graphics C?

код: сообщение

#include<stdio.h> 
#include<graphics.h> 
void main() 
{ 
     int gd = DETECT, gm; 
     int dx, dy, p, end; 
     float x1, x2, y1, y2, x, y; 
     initgraph(&gd, &gm,NULL); 
     printf("Enter Value of X1: "); 
     scanf("%f", &x1); 
     printf("Enter Value of Y1: "); 
     scanf("%f", &y1); 
     printf("Enter Value of X2: "); 
     scanf("%f", &x2); 
     printf("Enter Value of Y2: "); 
     scanf("%f", &y2); 

     dx = abs(x1 - x2); 
     dy = abs(y1 - y2); 

     p = 2 * dy - dx; 
     if(x1 > x2) 
     { 
      x = x2; 
      y = y2; 
      end = x1; 
     } 
     else 
     { 
      x = x1; 
      y = y1; 
      end = x2; 
     } 
     putpixel(x, y, 10); 
     while(x < end) 
     { 
      x = x + 1; 
      if(p < 0) 
      { 
        p = p + 2 * dy; 
      } 
      else 
      { 
        y = y + 1; 
        p = p + 2 * (dy - dx); 
      } 
      putpixel(x, y, 10); 
     } 
     getch(); 
     closegraph(); 
} 

ошибка:

[email protected]:~/libgraph-1.0.2$ ./b 
[xcb] Unknown sequence number while processing queue 
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called 
[xcb] Aborting, sorry about that. 
b: ../../src/xcb_io.c:274: poll_for_event: Assertion `!xcb_xlib_threads_sequence_lost' failed. 
[xcb] Unknown sequence number while processing queue 
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called 
[xcb] Aborting, sorry about that. 
b: ../../src/xcb_io.c:274: poll_for_event: Assertion `!xcb_xlib_threads_sequence_lost' failed. 
Aborted (core dumped) 
+0

* graphics.h * только один файл заголовка. Фактически вы используете * libgraph *. Возможно, вы получите больше ответов, указав это. – tofro

+0

Если вы пытаетесь нарисовать несколько строк на изображении, вы можете использовать Magick ++. Это может привести к запуску https://www.imagemagick.org/Magick++/Image++.html и http://www.imagemagick.org/Magick++/tutorial/Magick++_tutorial.pdf –

+0

Другим вариантом может быть использование libvga ', см. мой ответ здесь http://stackoverflow.com/a/36529602/2836621, а также http://www.svgalib.org –

ответ

1

Вы можете попробовать использовать libsvga, который, кажется, прекрасно работать на Linux Mint - я побежал Mint под Virtualbox на Mac без проблем.

Я установил следующие пакеты:

sudo apt-get install svgalib-bin libsvga1 libsvga1-dev 

А потом я взломан код в следующее:

#include <stdlib.h> 
#include <math.h> 
#include <unistd.h> 
#include <vga.h> 
#include<stdio.h> 

void main() 
{ 
    int dx, dy, p, end; 

    /* detect the chipset and give up supervisor rights */ 
    if (vga_init() < 0) 
     return EXIT_FAILURE; 

    vga_setmode(G1024x768x256); /* some low resolution dont work */ 
    vga_setcolor(14);   /* color of pixel */ 

    float x1, x2, y1, y2, x, y; 
    x1=10; 
    y1=40; 
    x2=800; 
    y2=500; 

    dx = abs(x1 - x2); 
    dy = abs(y1 - y2); 

    p = 2 * dy - dx; 
    if(x1 > x2) 
    { 
     x = x2; 
     y = y2; 
     end = x1; 
    } else { 
     x = x1; 
     y = y1; 
     end = x2; 
    } 
    vga_drawpixel(x, y); 
    while(x < end){ 
     x = x + 1; 
     if(p < 0) 
     { 
     p = p + 2 * dy; 
     } else { 
     y = y + 1; 
     p = p + 2 * (dy - dx); 
     } 
     vga_drawpixel(x, y); 
    } 
    sleep(10); 

    /* restore textmode and fall back to ordinary text console handling */ 
    vga_setmode(TEXT); 

} 

Я составил так:

gcc graphics.c -lvga -lm -o graphics 

и побежал с:

sudo ./graphics 

Я получил этот вывод - вы можете легко изменить числа, если хотите другой цвет или размер.

enter image description here

Смежные вопросы