-3

My C++ Project uses a library in form of header files and one shared object. When I try to build it, I get this:

FAILED: insta360 
: && /usr/bin/c++ -g  CMakeFiles/insta360.dir/main.cpp.o -o insta360  /usr/lib/libCameraSDK.so && :
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_device_get_devnode'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_monitor_enable_receiving'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_device_new_from_syspath'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_device_unref'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_monitor_new_from_netlink'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_device_get_sysname'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_enumerate_get_list_entry'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_monitor_unref'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_enumerate_add_match_subsystem'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_monitor_filter_add_match_subsystem_devtype'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_monitor_receive_device'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_enumerate_scan_devices'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_monitor_get_fd'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_unref'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_device_get_action'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_list_entry_get_name'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_enumerate_new'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_list_entry_get_next'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_new'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_enumerate_unref'
/usr/bin/ld: /usr/lib/libCameraSDK.so: undefined reference to `udev_enumerate_add_match_property'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

But when I run nm -D /usr/lib/libCameraSDK.so | grep udev I get

             U udev_device_get_action
             U udev_device_get_devnode
             U udev_device_get_sysname
             U udev_device_new_from_syspath
             U udev_device_unref
             U udev_enumerate_add_match_property
             U udev_enumerate_add_match_subsystem
             U udev_enumerate_get_list_entry
             U udev_enumerate_new
             U udev_enumerate_scan_devices
             U udev_enumerate_unref
             U udev_list_entry_get_name
             U udev_list_entry_get_next
             U udev_monitor_enable_receiving
             U udev_monitor_filter_add_match_subsystem_devtype
             U udev_monitor_get_fd
             U udev_monitor_new_from_netlink
             U udev_monitor_receive_device
             U udev_monitor_unref
             U udev_new
             U udev_unref

So the functions are present and the .so file is correctly imported. My header files are in /usr/include and I have no Idea what could be wrong since I'm not very experienced with setting up C++ Projects myself and have only modified them. Thanks in advance.

CodeSpoof
  • 55
  • 4

1 Answers1

1

U means that the symbol is undefined, not that it is present.

Perhaps you need to link against some other library. Since the functions all start with udev, it is reasonable to assume that they belong to some library that deals with this thing called "udev". Maybe, just maybe, that library is called "libudev"?

n. m. could be an AI
  • 112,515
  • 14
  • 128
  • 243