keynav - Fedora (25) установка

359
csey

Недавно я столкнулся с трудностями при установке "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 

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

0

1 ответ на вопрос

2
csey

Таким образом, первая проблема вызвана отсутствием разработанной версии библиотеки 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файле.)]

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

Похожие вопросы