【问题标题】:Error while loading shared libraries: libsystemc-2.3.0.so加载共享库时出错:libsystemc-2.3.0.so
【发布时间】:2012-09-06 16:41:46
【问题描述】:

我是 Linux 的新用户,我正在尝试在我的机器 (Fedora 16) 上安装 systemc-2.3.0 库。我非常仔细地遵循了库的 INSTALL 文件中提到的每条说明,但是当我尝试使用 ECLIPSE 运行一个简单的程序时出现错误。我已在 ECLIPSE 中正确链接了所有库,但仍然出现错误。

程序如下:

#include <systemc.h>

using namespace std;

int sc_main(int argc, char * argv[])
{
    cout << "hello world" << endl;

    for(int i=0; i<argc; i++)
        cout << argv[i] << " ";

    cout << endl;
    return 0;
}

错误输出为:

/home/vivek/workspace/TestSystemC/Debug/TestSystemC:加载共享库时出错:libsystemc-2.3.0.so:无法打开共享对象文件:没有这样的文件或目录

任何帮助将不胜感激。由于我不是 Linux 专家,请以详尽的方式(逐步)解释您的建议。

谢谢。

【问题讨论】:

  • “libsystemc-2.3.0.so”是否存在于 /usr/lib 中?
  • 没有。 “libsystemc-2.3.0.so”位于 /usr/local/systemc-2.3.0/lib-linux64
  • 那么,这个路径是否包含在 $PATH 环境变量中?如果没有,请尝试在 /usr/lib 中链接到该库:ln -s /usr/local/systemc-2.3.0/lib-linux64/libsystemc-2.3.0.so /usr/lib/libsystemc-2.3.0.so
  • 对不起,我不知道什么是 PATH 变量。好吧,我在终端中粘贴了命令,但仍然无法运行该程序。我忘了提到我能够构建程序但是我无法运行它。
  • 1) 环境变量与 MS Windows 中的相同。在终端中输入 echo $PATH 以查看 PATH 的内容。 2)没有root权限,你不能链接这个库。

标签: c++ eclipse systemc


【解决方案1】:

这是动态链接的环境设置问题,因为共享库安装在系统默认库目录之外。执行二进制文件时,加载程序找不到 libsystemc-2.3.0.so。

两种解决方案。

  1. 设置您的 LD_LIBRARY_PATH。

    export LD_LIBRARY_PATH=/usr/local/systemc-2.3.0/lib-linux64:$LD_LIBRARY_PATH

    或者,如果您的默认 LD_LIBRARY_PATH 为空

    export LD_LIBRARY_PATH=/usr/local/systemc-2.3.0/lib-linux64

  2. 在链接二进制文件时将 rpath 添加到可执行文件。它向二进制文件添加一个条目并提示加载程序搜索其他路径。

    g++ -o TestSystemC ...your c++ files... -L/usr/local/systemc-2.3.0/lib-linux64 -lsystemc-2.3.0 -Wl,-rpath,/usr/local/systemc-2.3.0/lib-linux64

【讨论】:

    【解决方案2】:

    我在~/.profile 的末尾附加两行如下:

    export SYSTEMC_HOME=/usr/local/systemc-2.3.0/
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/systemc-2.3.0/lib-linux64
    

    如果这不起作用,您可以尝试在您安装的systemc-2.3.0的顶级目录中添加两个软链接(即lib-&gt;lib-linux64/lib-linux -&gt; lib-linux)(例如我的路径是/usr/local/systemc-2.3.0/) .对应的命令如下

    (将当前目录更改为 $SYSTEMC_HOME 目录):

    $ln -s /usr/local/systemc-2.3.0 lib
    $ln -s /usr/local/systemc-2.3.0  lib-linux
    

    也许lib-linux64支持64位操作系统,而lib或lib->linux支持32位操作系统。

    【讨论】:

      【解决方案3】:

      是的! 事实上,对于报告的所有此类错误,缺少的是用户没有或忘记设置 LD_LIBRARY_PATH

      【讨论】:

        【解决方案4】:

        你可以在eclipse中设置linker setting-> miscellaneous -> -Wl,-rpath,your_lib_path

        【讨论】:

          【解决方案5】:

          尝试通过访问 libsystemc-2.3.1.so 所在目录将 libsystemc-2.3.0.so 移动到默认库目录,打开终端并运行: sudo cp libsystemc-2.3.0.so /lib 这对我来说效果很好

          【讨论】:

            猜你喜欢
            • 2023-03-26
            • 1970-01-01
            • 2018-10-19
            • 2020-09-24
            • 2022-11-03
            • 2013-10-27
            • 2016-12-20
            • 1970-01-01
            • 2021-05-10
            相关资源
            最近更新 更多