diff --git a/src/OSspecific/POSIX/POSIX.C b/src/OSspecific/POSIX/POSIX.C index e214e7eecabcf09054838adbc52bfe67ab84a420..7a16679511c654bd484bbdc61b499bde83b255a2 100644 --- a/src/OSspecific/POSIX/POSIX.C +++ b/src/OSspecific/POSIX/POSIX.C @@ -1161,7 +1161,7 @@ int Foam::system(const std::string& command) } -void* Foam::dlOpen(const fileName& lib) +void* Foam::dlOpen(const fileName& lib, const bool check) { if (POSIX::debug) { @@ -1170,6 +1170,13 @@ void* Foam::dlOpen(const fileName& lib) } void* handle = ::dlopen(lib.c_str(), RTLD_LAZY|RTLD_GLOBAL); + if (!handle && check) + { + WarningIn("dlOpen(const fileName&, const bool)") + << "dlopen error : " << ::dlerror() + << endl; + } + if (POSIX::debug) { std::cout diff --git a/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C b/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C index 7d78063d5e813024a384e24ad910a2f8a31f8820..de0b87d9ea9c5cd741023259edcc39dc08d42619 100644 --- a/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C +++ b/src/OpenFOAM/db/dictionary/functionEntries/codeStream/codeStream.C @@ -143,8 +143,8 @@ Foam::functionEntries::codeStream::getFunction } else { - // Uncached opening of libPath - lib = dlOpen(libPath); + // Uncached opening of libPath. Do not complain if cannot be loaded + lib = dlOpen(libPath, false); } } @@ -226,7 +226,7 @@ Foam::functionEntries::codeStream::getFunction else { // Uncached opening of libPath - lib = dlOpen(libPath); + lib = dlOpen(libPath, true); } } diff --git a/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTable.C b/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTable.C index f3628f20813cadd3feea787deb5feda4bbb1a464..48bc178ac6a3749157d7bc35c925ba02ffaa45fa 100644 --- a/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTable.C +++ b/src/OpenFOAM/db/dynamicLibrary/dlLibraryTable/dlLibraryTable.C @@ -78,7 +78,7 @@ bool Foam::dlLibraryTable::open { if (functionLibName.size()) { - void* functionLibPtr = dlOpen(functionLibName); + void* functionLibPtr = dlOpen(functionLibName, verbose); if (debug) { diff --git a/src/OpenFOAM/include/OSspecific.H b/src/OpenFOAM/include/OSspecific.H index d39a1c54cbb2e4b931cdf768215525a23ef14e3a..14052f8a87654a2d78f452cdec44172af2de7cb8 100644 --- a/src/OpenFOAM/include/OSspecific.H +++ b/src/OpenFOAM/include/OSspecific.H @@ -197,8 +197,9 @@ bool ping(const string&, const label timeOut=10); //- Execute the specified command int system(const std::string& command); -//- open a shared library. Return handle to library -void* dlOpen(const fileName& lib); +//- open a shared library. Return handle to library. Print error message +// if library cannot be loaded (check = true) +void* dlOpen(const fileName& lib, const bool check = true); //- Close a dlopened library using handle. Return true if successful bool dlClose(void*);