我正在尝试编译一个自定义 OpenFOAM 应用程序。我的构建过程是使用 CMake 的(尽管我不确定这与我当前的问题有什么关系)。
对于熟悉 OpenFOAM 的人来说,这是 pisoFoam 应用程序,问题库是 incompressibleLESModels.so 库。
该项目构建没有任何问题。并运行直到它需要使用 IncompressibleLESModels 库。此时,应用程序声称对该库一无所知并停止。
我在 CMake 脚本中的 TARGET_LINK_LIBRARIES 中包含了不可压缩的LESModels 库(以及所有其他必要的库)。
OpenFOAM 允许用户在运行时通过输入文件链接库。此方法工作正常(即,我可以让应用程序动态加载到 incompressibleLESModels 库中并运行)。但我宁愿不依赖这种方法。而标准的 OpenFOAM 应用程序不会这样做。
当我在我的可执行文件上运行 ldd 时,不可压缩LESModels 库显然不在库列表中。
因此,就好像链接器在链接阶段检测到不需要该库并选择不链接它。据我了解,这可能是由于传递给 gcc 的定义,特别是 add-needed 或 as-needed并且不需要。
我通过 CMake 中的 ADD_DEFINITIONS 命令添加以下定义:
-DWM_DP -m64 -Dlinux64 -Wall -Wextra -Wno-unused-parameter -Wold-style-cast
-Wnon-virtual-dtor -O3 -DNoRepository -ftemplate-depth-100 -fPIC -Xlinker
--add-needed -Xlinker --no-as-needed
任何想法都非常感谢。
亲切的问候,玛德琳