カスタム OpenFOAM アプリケーションをコンパイルしようとしています。私のビルド手順は CMake を使用しています (ただし、これが現在の問題と関係があるかどうかはわかりません)。
OpenFOAM に詳しい人にとっては、これは pisoFoam アプリケーションであり、問題のライブラリは incompressibleLESModels.so ライブラリです。
プロジェクトは問題なくビルドされます。そして、IncompressibleLESModels ライブラリを利用する必要があるまで実行されます。この時点で、アプリはそのライブラリについて何も知らないと主張し、停止します。
CMake スクリプト内の TARGET_LINK_LIBRARIES に incompressibleLESModels ライブラリを (他の必要なすべてのライブラリと共に) 含めました。
OpenFOAM を使用すると、ユーザーは実行時に入力ファイルを介してライブラリにリンクできます。この方法は問題なく機能します (つまり、アプリを incompressibleLESModels ライブラリに動的にロードして実行することができます)。しかし、私はむしろこの方法に頼りたくありません。そして、標準の OpenFOAM アプリはこれを行いません。
実行可能ファイルで ldd を実行すると、incompressibleLESModels ライブラリが明らかにライブラリのリストにありません。
つまり、リンカがリンク段階でライブラリが不要であることを検出し、リンクしないことを選択したかのようです。私が理解していることから、これは 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
どんなアイデアでも大歓迎です。
よろしく、 マドレーヌ