compilebunny
compilebunny

Reputation: 45

How to get make to find libevdev objects?

I am trying to solve this bug because the author is no longer responding to bug reports: https://github.com/PeterCxy/evdev-right-click-emulation/issues/14

It is essentially the same as the two bugs reported below: https://github.com/PeterCxy/evdev-right-click-emulation/issues/12 https://github.com/PeterCxy/evdev-right-click-emulation/issues/13

I wonder if this can be fixed by modifying Makefile, but I don't know how.

The program compiled well on Raspbian 10 with the following evdev-related packages installed (apt list --installed | grep evdev)

libevdev-dev/oldstable,now 1.6.0+dfsg-1 armhf [installed]
libevdev-doc/oldstable,now 1.6.0+dfsg-1 all [installed]
libevdev-tools/oldstable,now 1.6.0+dfsg-1 armhf [installed]
libevdev2/oldstable,now 1.6.0+dfsg-1 armhf [installed]
python-evdev/oldstable,now 1.1.2+dfsg-1+b1 armhf [installed]
python3-evdev/oldstable,now 1.1.2+dfsg-1+b1 armhf [installed,automatic]

But it fails on Ubuntu Mate 20.04 with the following evdev-related packages installed

libevdev-dev/focal-updates,now 1.9.0+dfsg-1ubuntu0.1 arm64 [installed]
libevdev-doc/focal-updates,now 1.9.0+dfsg-1ubuntu0.1 all [installed]
libevdev-tools/focal-updates,now 1.9.0+dfsg-1ubuntu0.1 arm64 [installed]
libevdev2/focal-updates,now 1.9.0+dfsg-1ubuntu0.1 arm64 [installed]
python3-libevdev/focal,now 0.5-1 all [installed]
xserver-xorg-input-evdev-dbg/focal,now 1:2.10.6-1 arm64 [installed]
xserver-xorg-input-evdev-dev-hwe-18.04/focal,now 3:14.5 arm64 [installed]
xserver-xorg-input-evdev-dev/focal,now 1:2.10.6-1 all [installed]
xserver-xorg-input-evdev-hwe-18.04-dbg/focal,now 3:14.5 arm64 [installed]
xserver-xorg-input-evdev-hwe-18.04/focal,now 3:14.5 arm64 [installed]
xserver-xorg-input-evdev/focal,now 1:2.10.6-1 arm64 [installed]

make fails with

gcc -Wall -std=c11 -D_POSIX_C_SOURCE=199309L -levdev -I/usr/include/libevdev-1.0 -c uinput.c -o out/uinput.o
gcc -Wall -std=c11 -D_POSIX_C_SOURCE=199309L -levdev -I/usr/include/libevdev-1.0 -c input.c -o out/input.o
gcc -Wall -std=c11 -D_POSIX_C_SOURCE=199309L -levdev -I/usr/include/libevdev-1.0 -c rce.c -o out/rce.o
gcc -Wall -std=c11 -D_POSIX_C_SOURCE=199309L -levdev -I/usr/include/libevdev-1.0 out/uinput.o out/input.o out/rce.o -o out/evdev-rce
/usr/bin/ld: out/uinput.o: in function `uinput_initialize':
uinput.c:(.text+0x1c): undefined reference to `libevdev_new'
/usr/bin/ld: uinput.c:(.text+0x30): undefined reference to `libevdev_set_name'
/usr/bin/ld: uinput.c:(.text+0x3c): undefined reference to `libevdev_enable_event_type'
/usr/bin/ld: uinput.c:(.text+0x50): undefined reference to `libevdev_enable_event_code'
/usr/bin/ld: uinput.c:(.text+0x68): undefined reference to `libevdev_uinput_create_from_device'
/usr/bin/ld: uinput.c:(.text+0x7c): undefined reference to `libevdev_free'
/usr/bin/ld: out/uinput.o: in function `uinput_send_right_click':
uinput.c:(.text+0xd0): undefined reference to `libevdev_uinput_write_event'
/usr/bin/ld: uinput.c:(.text+0xe4): undefined reference to `libevdev_uinput_write_event'
/usr/bin/ld: uinput.c:(.text+0xf8): undefined reference to `libevdev_uinput_write_event'
/usr/bin/ld: uinput.c:(.text+0x10c): undefined reference to `libevdev_uinput_write_event'
/usr/bin/ld: out/input.o: in function `free_evdev':
input.c:(.text+0x10): undefined reference to `libevdev_get_fd'
/usr/bin/ld: input.c:(.text+0x1c): undefined reference to `libevdev_free'
/usr/bin/ld: out/input.o: in function `build_fd_set':
input.c:(.text+0xfc): undefined reference to `libevdev_get_fd'
/usr/bin/ld: out/input.o: in function `process_evdev_input':
input.c:(.text+0x5a0): undefined reference to `libevdev_get_fd'
/usr/bin/ld: input.c:(.text+0x5d8): undefined reference to `libevdev_get_fd'
/usr/bin/ld: input.c:(.text+0x634): undefined reference to `libevdev_next_event'
/usr/bin/ld: input.c:(.text+0x6ac): undefined reference to `libevdev_uinput_destroy'
/usr/bin/ld: out/rce.o: in function `find_evdev':
rce.c:(.text+0x1bc): undefined reference to `libevdev_new_from_fd'
/usr/bin/ld: rce.c:(.text+0x214): undefined reference to `libevdev_has_event_type'
/usr/bin/ld: rce.c:(.text+0x228): undefined reference to `libevdev_has_event_type'
/usr/bin/ld: rce.c:(.text+0x240): undefined reference to `libevdev_has_event_code'
/usr/bin/ld: rce.c:(.text+0x258): undefined reference to `libevdev_has_event_code'
/usr/bin/ld: rce.c:(.text+0x268): undefined reference to `libevdev_get_name'
/usr/bin/ld: rce.c:(.text+0x34c): undefined reference to `libevdev_free'
collect2: error: ld returned 1 exit status
make: *** [Makefile:19: out/evdev-rce] Error 1

Here are the contents of Makefile. :

CC := gcc
XFLAGS := -Wall -std=c11 -D_POSIX_C_SOURCE=199309L
LIBRARIES := -levdev
INCLUDES := -I/usr/include/libevdev-1.0
CFLAGS := $(XFLAGS) $(LIBRARIES) $(INCLUDES)

OUTDIR := out
SOURCES := uinput.c input.c rce.c
OBJS := $(SOURCES:%.c=$(OUTDIR)/%.o)
TARGET := $(OUTDIR)/evdev-rce

.PHONY: all clean

$(OUTDIR)/%.o: %.c
    @mkdir -p $(OUTDIR)
    $(CC) $(CFLAGS) -c $< -o $@

$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) $^ -o $@

all: $(TARGET)
clean:
    rm -rf $(OUTDIR)

libevdev-related files present include

/usr/include/libevdev-1.0
/usr/include/libevdev-1.0/libevdev
/usr/include/libevdev-1.0/libevdev/libevdev-uinput.h
/usr/include/libevdev-1.0/libevdev/libevdev.h
/usr/include/gudev-1.0/gudev/gudevdevice.h
/usr/lib/aarch64-linux-gnu/libevdev.so
/usr/lib/aarch64-linux-gnu/libevdev.a
/usr/lib/aarch64-linux-gnu/pkgconfig/libevdev.pc
/usr/lib/aarch64-linux-gnu/libevdev.so.2
/usr/lib/aarch64-linux-gnu/qt5/plugins/generic/libqevdevkeyboardplugin.so
/usr/lib/aarch64-linux-gnu/qt5/plugins/generic/libqevdevtouchplugin.so
/usr/lib/aarch64-linux-gnu/qt5/plugins/generic/libqevdevmouseplugin.so
/usr/lib/aarch64-linux-gnu/qt5/plugins/generic/libqevdevtabletplugin.so
/usr/lib/aarch64-linux-gnu/libevdev.so.2.3.0

Upvotes: 0

Views: 1293

Answers (1)

Digifaktur
Digifaktur

Reputation: 257

Editing your Makefile like this:

https://github.com/PeterCxy/evdev-right-click-emulation/pull/5/commits/06c9506ce8cbb4d741f852359d7b77e300b12e49

worked for me. Basically, remove $(LIBRARIES) from CFLAGS, and add it between $^ and -o in the $(CC) command line.

Upvotes: 2

Related Questions