3

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

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

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

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

知道什么会导致问题吗?

谢谢

4

1 回答 1

3

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

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

请注意,静态链接不是灵丹妙药。对于奇怪的硬件模拟器的特殊问题,它应该是一个好方法。然而,总的来说,静态链接有(至少)两个缺点:

  • 二进制大小。想象一下,如果您静态链接所有 KDE 程序,那么您的系统上实际上将拥有所有 KDE/QT 库的数百个副本,而如果您使用共享库则可能只有一个副本
  • 更新路径。假设人们在图书馆发现了一个安全问题x。使用共享库,只要在补丁可用时简单地更新库就足够了。如果您的所有应用程序都是静态链接的,您将不得不等待所有这些开发人员重新链接并重新发布他们的应用程序。
于 2013-02-02T13:19:40.837 回答