我在C++代码中使用OpenMP。

libgomp.so.1存在于我的lib文件夹中。我还将其路径添加到LD_LIBRARY_PATH

仍然在运行时我收到错误消息:libgomp.so.1:无法打开共享的目标文件

在编译时,我使用-fopenmp选项编译代码。

知道什么会导致问题吗?

谢谢

最佳答案

对程序使用静态链接。在您的情况下,这意味着使用-fopenmp -static,并在必要时指定相关librt.alibgomp.a库的完整路径。

这解决了您的问题,因为静态链接仅将运行程序所需的所有代码与二进制文件打包在一起。因此,您的目标系统不需要查找任何动态库,即使它们存在于目标系统上也没有关系。

请注意,静态链接并非奇迹。对于怪异的硬件仿真器的特殊问题,这应该是一个好方法。但是,通常来说,静态链接至少有两个缺点:

  • 二进制大小。想象一下,如果您静态地链接了所有KDE程序,那么如果您使用共享库
  • 时只有一个,那么您实质上将拥有系统上所有KDE / QT库的数百个副本。
  • 更新路径。假设人们在x库中发现了一个安全问题。使用共享库,只要有可用的补丁程序就更新库即可。如果所有应用程序都是静态链接的,则必须等待所有这些开发人员重新链接并重新发布他们的应用程序。
  • 10-01 01:52