运行可执行文件时,CLion无法找到共享库

时间:2017-02-01 11:53:22

标签: c++ cmake clion

我正在开展一个项目。到目前为止,我一直在使用一个简单的编辑器和我自己的Makefile来构建它。不过,我想切换到CLion。

根据this question,您可以告诉CMake运行您的Makefile。所以我的CMake.txt看起来像这样:

cmake_minimum_required(VERSION 3.6)
project(rekotrans_testbed_simulator)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

add_custom_target(rekotrans_testbed_simulator COMMAND make -C ${rekotrans_testbed_simulator_SOURCE_DIR} CLION_EXE_DIR=${PROJECT_BINARY_DIR})

它建立得很好。我还设置了工作目录并指出了正确的可执行文件。

在我的项目中,我使用cppunit 1.13进行测试。但是它无法找到共享库:

/home/kunterbunt/dev/comnets/git-repository/rekotrans-testbed-simulator/rekotrans-testbed-simulator-tests: error while loading shared libraries: libcppunit-1.13.so.0: cannot open shared object file: No such file or directory

LD_LIBRARY_PATH指向

echo $LD_LIBRARY_PATH 

/usr/local/lib

/usr/local/lib包含库:

ls /usr/local/lib/

libcppunit-1.13.so.0@  libcppunit-1.13.so.0.0.2*  libcppunit.a  libcppunit.la*  libcppunit.so@  pkgconfig/

ldd显示了这一点:

ldd /home/kunterbunt/dev/comnets/git-repository/rekotrans-testbed-simulator/rekotrans-testbed-simulator-tests

linux-vdso.so.1 (0x00007ffc257e8000)
libboost_thread.so.1.63.0 => /usr/lib/libboost_thread.so.1.63.0 (0x00007f1c73254000)
libboost_system.so.1.63.0 => /usr/lib/libboost_system.so.1.63.0 (0x00007f1c73050000)
libboost_date_time.so.1.63.0 => /usr/lib/libboost_date_time.so.1.63.0 (0x00007f1c72e3f000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f1c72c22000)
libboost_program_options.so.1.63.0 => /usr/lib/libboost_program_options.so.1.63.0 (0x00007f1c729a4000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f1c727a0000)
libcppunit-1.13.so.0 => /usr/local/lib/libcppunit-1.13.so.0 (0x00007f1c72563000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f1c721db000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f1c71ed7000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f1c71cc0000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f1c71922000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f1c7171a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1c7347c000)

那么为什么CLion找不到呢?如果我从控制台运行二进制文件,一切都有效。

3 个答案:

答案 0 :(得分:2)

正如oLen正确指出的那样,当通过GUI启动时,CLion似乎不是以我的用户身份启动的(在我的情况下是Gnome)。我不知道它是什么启动,但在LD_LIBRARY_PATH=/usr/local/lib中设置/etc/profile并重新启动(或重新配置)它使它工作 - 简而言之,变量没有为任何用户运行CLion设置。

另一种方式是Run -> Edit Configurations -> (select your application) -> Environment variables。在这里,您可以手动将LD_LIBRARY_PATH设置为您需要的任何内容,在我的情况下设置为/usr/local/lib

答案 1 :(得分:1)

查看How to set the environmental variable LD_LIBRARY_PATH in linux

如果您将自定义库路径添加到LD配置,那么CLion将自动找到您的库,而您不必将它们添加到运行配置中。

在Ubuntu / Debian上,您可以通过创建新的.conf文件来配置LD

sudo nano /etc/ld.so.conf.d/myLocalLibs.conf

只包含您的库的路径:/usr/local/lib。最后,致电

sudo ldconfig

更新LD配置。

请注意,在某些系统(Ubuntu / Debian)上,您无法在/ etc / profile或/ etc / environment中设置LD_LIBRARY_PATH:

  

由于Ubuntu 9.04 Jaunty Jackalope,LD_LIBRARY_PATH无法设置   $ HOME / .profile,/ etc / profile,也没有/ etc / environment文件。你必须使用   /etc/ld.so.conf.d/*.conf配置文件。见Launchpad bug #366728   欲获得更多信息。   (help.ubuntu.com

答案 2 :(得分:0)

作为已接受答案的替代方法,您可以转到Run -> Edit Configurations -> Templates,选择CMake Application(和/或Google Test)并将Environment variables:设置为:

LD_LIBRARY_PATH=/usr/local/gcc-latest/lib64

从现在开始创建的任何新应用程序都将继承这些设置。