Недавно я столкнулся с трудностями при установке "keynav" (утилита для управления указателем мыши с помощью клавиатуры). Первая проблема:

keynav.c:29:17: fatal error: xdo.h: No such file or directory
#include <xdo.h>
                ^
compilation terminated.

И однажды это было решено вторым:

cc keynav.o -o keynav -lcairo -lXinerama -lglib-2.0 -lXext -lX11 -lXtst -lglib-2.0 -lxdo; \

keynav.o: In function `parse_mods':
keynav.c:(.text+0x16c): undefined reference to `xdo_symbol_map'
keynav.o: In function `cmd_start':
keynav.c:(.text+0x1a1e): undefined reference to `xdo_window_setclass'
keynav.o: In function `cmd_cursorzoom':
keynav.c:(.text+0x20bb): undefined reference to `xdo_mouselocation'
keynav.o: In function `cmd_windowzoom':
keynav.c:(.text+0x212f): undefined reference to `xdo_window_get_active'
keynav.o: In function `cmd_warp':
keynav.c:(.text+0x22d9): undefined reference to `xdo_mousemove'
keynav.c:(.text+0x22f5): undefined reference to `xdo_mouse_wait_for_move_to'
keynav.o: In function `cmd_click':
keynav.c:(.text+0x235f): undefined reference to `xdo_click'
keynav.o: In function `cmd_drag':
keynav.c:(.text+0x2487): undefined reference to `xdo_mouseup'
keynav.c:(.text+0x24c3): undefined reference to `xdo_keysequence_down'
keynav.c:(.text+0x24df): undefined reference to `xdo_mousedown'
keynav.c:(.text+0x24fd): undefined reference to `xdo_mousemove_relative'
keynav.c:(.text+0x251b): undefined reference to `xdo_mousemove_relative'
keynav.c:(.text+0x2555): undefined reference to `xdo_keysequence_up'
collect2: error: ld returned 1 exit status
Makefile:31: recipe for target 'keynav' failed
make: *** [keynav] Error 1

Однако теперь он успешно установлен, поэтому я опубликую ответ на тот случай, если кому-то еще это понадобится!

1 ответ1

2

Таким образом, первая проблема вызвана отсутствием разработанной версии библиотеки xdo и устранена

dnf install libxdo-devel

Вторая проблема вызвана тем, что файл keynav.c содержит несколько вызовов с неправильными именами из заголовочного файла xdo.h (Я предполагаю некоторое несоответствие между версиями здесь, но не рассматривал это.)

В любом случае, их можно исправить вручную, найдя функции с одинаковыми именами в заголовочном файле и отредактировав имена в исходном файле. Вот результат diff изменений и оригинала:

292c289
<   const char **symbol_map = xdo_get_symbol_map(); 
---
>   const char **symbol_map = xdo_symbol_map();
846c843
<     xdo_set_window_class(xdo, zone, "keynav", "keynav");
---
>     xdo_window_setclass(xdo, zone, "keynav", "keynav");
1004c1001
<   xdo_get_mouse_location(xdo, &xloc, &yloc, NULL);
---
>   xdo_mouselocation(xdo, &xloc, &yloc, NULL);
1019c1016
<   xdo_get_active_window(xdo, &curwin);
---
>   xdo_window_get_active(xdo, &curwin);
1048,1049c1045,1046
<   xdo_move_mouse(xdo, x, y, viewports[wininfo.curviewport].screen_num);
<   xdo_wait_for_mouse_move_to(xdo, x, y);
---
>   xdo_mousemove(xdo, x, y, viewports[wininfo.curviewport].screen_num);
>   xdo_mouse_wait_for_move_to(xdo, x, y);
1062c1059
<     xdo_click_window(xdo, CURRENTWINDOW, button);
---
>     xdo_click(xdo, CURRENTWINDOW, button);
1100c1097
<     xdo_mouse_up(xdo, CURRENTWINDOW, button);
---
>     xdo_mouseup(xdo, CURRENTWINDOW, button);
1104,1105c1101,1102
<     xdo_send_keysequence_window_down(xdo, 0, drag_modkeys, 12000);
<     xdo_mouse_down(xdo, CURRENTWINDOW, button);
---
>     xdo_keysequence_down(xdo, 0, drag_modkeys, 12000);
>     xdo_mousedown(xdo, CURRENTWINDOW, button);
1109,1110c1106,1107
<     xdo_move_mouse_relative(xdo, 1, 0);
<     xdo_move_mouse_relative(xdo, -1, 0);
---
>     xdo_mousemove_relative(xdo, 1, 0);
>     xdo_mousemove_relative(xdo, -1, 0);
1112c1109
<     xdo_send_keysequence_window_up(xdo, 0, drag_modkeys, 12000);
---
>     xdo_keysequence_up(xdo, 0, drag_modkeys, 12000);

Как видите, только имена функций должны быть изменены, а не параметры.

[Если вы не знаете diff: в этом случае строка (и) над каждым --- это новые (начинающиеся с <), а строка (и) под каждым --- это старые, которые были изменены ( начиная с > , и вам тоже нужно будет это изменить в файле keynav.c .)]

Надеюсь, это поможет!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .