Daniel Saad
Daniel Saad

Reputation: 425

How can LD_LIBRARY_PATH be changed within CMake?

I have a local shared library which is not in $LD_LIBRARY_PATH. I want to run my executable, but since it cannot find the shared library in the system folders, it outputs "error while loading shared libraries".

A possible fix for this is to export a new LD_LIBRARY_PATH containing the local library folder.

How can I export automatically this environment variable within CMake?

Upvotes: 38

Views: 56126

Answers (3)

explo91
explo91

Reputation: 560

If your shared lib is not build in the same CMake project of your executable, you can use the CMake rpath handling like this:

set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

When you will run make install, CMake will automatically set the runtime path of your executable to your shared library.

If your shared library is built in the same CMake project, use this:

set(CMAKE_INSTALL_RPATH "/usr/local/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

In this case you must add yourself the directory where your shared library will be installed to the runtime path.

For more information, you can read CMake rpath handling

Upvotes: 18

Gschmaaz
Gschmaaz

Reputation: 91

When you use this solution:

SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

Remembter to set the RPATH before defining the targets in your CMake-File. So this instruction have to be before add_executable() or add_library() is called, otherwise it has no effect.

Upvotes: 4

hank
hank

Reputation: 9853

You can set the runtime shared library search path using the -rpath linker option:

SET(CMAKE_EXE_LINKER_FLAGS 
          "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,/usr/local/lib")

Upvotes: 21

Related Questions