Nsight Eclipse无法找到共享库

时间:2014-10-10 22:18:42

标签: c++ eclipse cuda nsight

我正在使用NSight Eclipse创建一个包含CUDA加速类的类库,这些类旨在由第三方应用程序进行扩展和使用。让我们来调用我的项目“foo”#。我想通过在一个单独的项目中编写第三方应用程序来测试foo,包括我的测试应用程序,然后运行它。但是,当我这样做时,测试应用程序无法找到foo共享库文件。

我已将测试项目的路径设置为我foo的src目录,测试应用程序正在请求正确的库名称,并且foo / Debug的路径是正确的。我的处理基于this posting中的说明。

我已经验证foo正在生成共享库工件,并且检查了-fPIC标志。

我可以编译这两个项目,所以看起来设置确实是正确的,但是当我真正尝试运行测试项目时,我在加载共享库时得到消息"错误:foo.so:无法打开共享对象文件:没有这样的文件或目录"。但是当我查看foo / Debug目录时,我可以在那里看到文件libfoo.so。

我已经尝试将foo更改为静态库,但这会产生相同的错误消息。

发生了什么,我该怎么做才能解决它?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

Linux通常不会加载用户创建的共享库,除非该库位于LD_LIBRARY_PATH环境变量中包含的路径上。

将相关库路径添加到LD_LIBRARY_PATH环境变量中以解决此问题。

使用bash / sh你可以:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/my/library.so

此时,作为测试,从命令行运行程序。它现在应该找到库。

然后你可以启动Nsight EE,它也应该找到它。

这没有多大意义:

  

我已经尝试将foo更改为静态库,但这会产生相同的错误消息。

永远不会动态加载静态库,即使它正在"正确"路径。

答案 1 :(得分:1)

不幸的是,更改LD_LIBRARY_PATH对问题没有影响。这可能会让操作系统知道额外的位置,但不会知道NSight。

最终为我工作的是在项目的根目录中添加一个符号链接到共享库。 ie ln -s ~/path/to/foo.so foo.so现在foo.so可以直接用于我的项目,即使我以后重新编译foo。

这仍然感觉有点像黑客,但至少我可以继续发展......

答案 2 :(得分:0)

我正在尝试解决同一问题。 在我的配置中,我的项目位于同一工作区中,并且我试图将它们全部链接到一个项目中。

对我来说,解决方案是为每个项目添加引用。 所以那是: 属性->路径和符号->参考标签

然后只检查您需要的工作空间中的项目。