basically libudev cannot be static library because it is part of systemd, and systemd does not seem to support static linking: your app might not work on other systems in that's the case. But if the goal is to remove the direct dependency on libudev, you can use dlopen/dlsym to load libudev.so functions, and the app may run without libudev at all. Take a look at my small wrapper for dynamically linking libudev, maybe it will be helpful: https://github.com/alexbsys/udev_dynamic_wrapper