Exodriver | LabJack
« Close

Datasheets and User Guides

App Notes

Software & Driver



Which library to use by LabJack device

U3, U6, and UE9: Exodriver is the low-level driver for macOS and Linux. For Windows, the UD library is an easier-to-use, high-level library.

T7 and T4: Use the LJM Library, which is an easier-to-use, high-level library for Windows/Linux/macOS.

U12: For Linux and macOS, the ljacklm library is an easier-to-use, high-level driver. ljacklm requires Exodriver. See the note about installing LabJackHID for macOS below. For Windows, see the ljackuw.

See also: what software to use for which device.

Exodriver (liblabjackusb)

Download 32 and 64 bit driver source code and C/C++ examples.

Other Downloads and Resources

Introducing the Exodriver

The Exodriver (also known as liblabjackusb) is a thin interface (think exoskeleton) to LabJack devices. It’s written as a C library that uses libusb-1.0 for USB communication. The library can open, close, read from, and write to any LabJack device via USB. Because it’s a library and doesn’t have any kernel code, it’s easy to build.

macOS Quickstart

macOS users can use the pre-built installer (click to download) rather than building the Exodriver from the source. We also provide a simple Xcode project (click to download) if you would like to use Xcode to build LabJack applications with the Exodriver. C language examples are provided with the Exodriver’s source code.

If you would prefer to build the Exodriver from the source, the instructions in the next section work on macOS.

Note to U12 Users on macOS: Use the “Customize install” option of the pre-built installer to add the LabJackHID kernel extension. This is a null kernel extension which prevents the OS’s HID driver from claiming a LabJack HID device. This is only required by U12 devices, otherwise it does not need to be installed.

Quickstart: Building from the source

First, make sure the following requirements are met:

  1. A modern Linux or macOS system
  2. A C compiler (gcc, e.g., build-essential on Debian/Ubuntu, Xcode on macOS)
  3. libusb-1.0 library and header files installed (from the source or -dev binary packages)

Linux notes:

  • Most distributions have libusb-1.0 installed, and only the header/development files are needed. It is recommended to not build from source code and to use the libusb-1.0 version from your distribution's package manager.
  • If using Ubuntu or a Debian based distribution, take a look at the in-depth build instructions page. This includes Raspbian on the Raspberry Pi. It provides a full list of commands to fulfill requirements and install Exodriver.

macOS note:

Now after the requirements have been met, building the Exodriver is easy. Download the source (click the “Download ZIP” button on that page), build and install it.

On both Linux and macOS, in the Exodriver directory run

$ sudo ./install.sh

After installing the Exodriver, build the U3, U6, or UE9 example programs:

$ cd examples/U6/
$ make

Run one of example programs like this:

$ ./u6BasicConfigU6

For more information, consult INSTALL.Linux or INSTALL.MacOSX. INSTALL.Linux details which kernel versions are required, and how to manually install the driver and set device permissions properly without the install.sh script. INSTALL.MacOSX lists which releases of macOS are supported.

Known Issues

macOS: As of macOS 10.15, opening a U6 the first time after plugging it in sometimes fails. Subsequent attempts to open succeed.


Support - LJM Installer Location Reminder

Looking for software for the T7, T4 or Digit?

Support - UD Installer Location Reminder

Looking for software for the U3, U6, or UE9?

Support - U12 Installer Location Reminder

Looking for software for the U12?


Hi LabJack,

i was asked by a customer, if we can use the u12 for a project on MacOS

Can you confirm that your software/driver/libraries are all compatible with MacOS 10.10. and Xcode 6.1?

Is there any Objective-C SourceCode available? Just with a little user interface to check, if the device is working properly?



We tested briefly on Mac OS X 10.10 and the U12 library was working. If you do run into problems we will look into it. Use the installer for the U12 high-level library (which uses the Exodriver for USB communications) as it was updated for OS X 10.10:


The installer on this page currently only contains the unsigned U12 kext, and will not work on OS X 10.10 and newer.

We provide C/C++ examples that you can build by command line (make). ljacklm (U12 high-level library we recommend using) source code and C/C++examples can be found on its page. You can use its examples to see if the device is working properly. Exodriver source code and C/C++examples can be found on this page.

In Xcode you will need to link to libljacklm.dylib (ljacklm.h header file in /usr/local/include). We do not have Objective-C examples.

uckuns's picture

I am using Xcode 7.3. I am unable to build and run the Exodriver example correctly. I end up with the following linker error:

  ld: library not found for -llabjackusb-2.5.2

  clang: error: linker command failed with exit code 1 (use -v to see invocation)

I did include liblabjackusb.dylib under Build Phases > Link Binary with Libraries (which is an alias to liblabjackusb-2.5.2.dylib). The path for the library shows correctly in the Project window, and the type is identified as "Default - Mach-O Dynamic Library". 

I do not understand why the linker cannot find the library,

labjack support's picture

Try the following:

1. Check that this isn't related to a permission issue with the /usr/local/lib folder. Refer to this comment here on checking and fixing that issue:


2. For the linker flag in your project settings use -llabjackusb.

3. Try adding /usr/local/lib/ to the project's "Library Search Paths". If for some reason liblabjackusb.dylib cannot be found without adding this path, XCode or the operating system is not searching for libraries in /usr/local/lib/ by default. 

uckuns's picture

Thank you for your prompt reply. The solution was to add /usr/local/lib to the library search paths. It took me a while to figure out how to do it - Xcode is a confusing mess!