Nsight Eclipse 无法找到共享库

问题描述 投票:0回答:3

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

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

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

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

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

发生了什么事,我能做些什么来解决它?

感谢您的帮助。

c++ eclipse cuda nsight
3个回答
2
投票

Linux 通常不会加载用户创建的共享库,除非该库位于

LD_LIBRARY_PATH
环境变量中包含的路径上。

设置您的

LD_LIBRARY_PATH
环境变量以包含包含您的库的文件夹。

使用 bash/sh 你可以:

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

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

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

这没有多大意义:

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

静态库永远不会被动态加载,即使它位于“正确”的路径上。


1
投票

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

最终对我有用的是在项目根目录中添加一个到共享库的符号链接。即

ln -s ~/path/to/foo.so foo.so
,现在 foo.so 可直接用于我的项目,即使我稍后重新编译 foo。

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


0
投票

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

我的解决方案是为每个项目添加参考。 所以那是: 属性 -> 路径和符号 -> 引用选项卡

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

© www.soinside.com 2019 - 2024. All rights reserved.