0

Background, I'm trying to play with a Kinect camera and Python.

When I tried to make freenect (manual install) on Ubuntu 12.04, it complained about undefined libusb_get_parent.

However, it works fine on Ubuntu 14.04.

Next I go to a Raspberry PI, and try to get that manual install to work there. No dice. Same libusb_get_parent complaint.

So I apt-get update, upgrade, dist-upgrade, no dice. I try to get libusb-dev and all sorts of things.

So I do dpkg -s libusb-1.0-0-dev on Ubuntu 12.02. It says it uses

Source: libusb-1.0 
Version: 2:1.0.9~rc3-2ubuntu1

On Ubuntu 14.04 it says:

Source: libusbx
Version: 2:1.0.17-1ubuntu2

And finally on the Raspberry PI:

Source: libusbx
Version: 2:1.0.11-1

So I figure, if I can get a newer version of libusbx onto the Raspberry PI, I should at least get a little farther.

I downloaded the latest libusbx here (http://sourceforge.net/projects/libusbx/files/releases/1.0.18/source/)

And then did:

$ sudo su
$ ./configure && make && make install && sudo ldconfig

From the directory that I extracted. (It appeared to configure and make.)

I again did dpkg -s libusb-1.0-0-dev thinking I'd now have my new 1.0.18 version, but that's not the case. It's still 1.0.11.

I'm sure it's something simple I'm missing. Thanks.

4
  • It's not clear whether you're talking about this.
    – user44370
    Sep 11, 2014 at 9:52
  • Yes, I'm doing the manual install (for Ubuntu) except I'm doing it on Raspbian. The problem seems to be an older usblib(x) Sep 11, 2014 at 18:41
  • I can see some main contributors in their openkinect chatroom on freenode, they could maybe help if you can't figure out how to use the library version you want...
    – user44370
    Sep 11, 2014 at 18:57
  • 1
    Thanks. I've gotten the kinect to work on Ubuntu. I'm actually less interested in the kinect aspect as I am learning how Linux links these different libraries during make, and what it takes to drop in my own (such as libusbx 1.0.18). Sep 11, 2014 at 19:00

1 Answer 1

1

You've compiled from source. This means that Ubuntu's package management system doesn't know about it. Package managers only know about packages that were installed using package managers (such as apt and dpkg). Additionally, when a package manager installs an newer version, it uninstalls older versions. As the package manager didn't install this new version, it follows that it won't have installed your original. Hence why dpkg still shows the older version.

If I were in your shoes, I'd run make uninstall on the source to remove the files. Then I'd download the libusbx package for Ubuntu 14.04 and try to install that manually. If it doesn't complain about missing dependencies then you should hopefully get away with not compiling.

Versions should be backward compatible, so hopefully installing a later version won't break any installed packages that already depend on the current libusbx.

If the above doesn't work for you, consider building the package from source. This process creates a deb package for you, which you can then install with your normal package managers. Done this way, you're dpkg command will show the newest version and the older version will be removed.

There is a good Stack Exchange question that covers this process here.

6
  • Ok, I've compiled from source so the package manager doesn't know about it. That makes sense. So when I run the setup program (the manual install from the openkinect page from the comment), it tells me this: "Linking C executable ../bin/freenect-chunkview ../lib/libfreenect.so.0.5.0: undefined reference to `libusb_get_parent'" So clearly it's trying to link to the old default usblib. How do I tell it to use the new one I downloaded? Does the linker rely on the packagemanager too? Sep 11, 2014 at 18:39
  • The linker doesn't rely on the package manager. If you choose to bypass the package manager then you're on your own the whole way. You'll need to make sure the configure options are correct for your distro and once you've compiled and installed you need to update the linker (ldconfig) so that the system is aware of the file. When you configure, it might be worth settings things up so that they are installed in /usr/local/lib instead of the usual /usr/lib in order to keep things apart. Sep 11, 2014 at 19:04
  • Ok, so my issue is on the make side of the libfreenect. I need to tell it to look in ~/libusbx/libusbx-1.0.18/? I tried this LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/libusbx/libusbx-1.0.18 and make on freenect still complains no libusb_get_part. I see the libusb_get_parent in the .h file of the libusbx I downloaded. It's not in the default one. Thanks for your help. Sep 11, 2014 at 19:18
  • Whoops, nevermind, I think I wasn't deleting my build directory and starting once the new usblibx was installed. I got it. Thanks! Sep 11, 2014 at 19:27
  • Thanks for accepting my answer. However, I think that instead you should answer your own question (which is fine) with what you did to fix it. You've compiled manually, while I was suggesting you create a new deb file - two different methods. You could document the process you carried out in an answer which may help someone who stumbles on this question the future. Glad you got it to work. Sep 11, 2014 at 20:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.