ENH: dlOpen: check error message string

This commit is contained in:
mattijs
2011-10-24 21:31:38 +01:00
parent 48212805c0
commit 1cc1ddcacf
4 changed files with 15 additions and 7 deletions

View File

@ -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) if (POSIX::debug)
{ {
@ -1170,6 +1170,13 @@ void* Foam::dlOpen(const fileName& lib)
} }
void* handle = ::dlopen(lib.c_str(), RTLD_LAZY|RTLD_GLOBAL); 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) if (POSIX::debug)
{ {
std::cout std::cout

View File

@ -143,8 +143,8 @@ Foam::functionEntries::codeStream::getFunction
} }
else else
{ {
// Uncached opening of libPath // Uncached opening of libPath. Do not complain if cannot be loaded
lib = dlOpen(libPath); lib = dlOpen(libPath, false);
} }
} }
@ -226,7 +226,7 @@ Foam::functionEntries::codeStream::getFunction
else else
{ {
// Uncached opening of libPath // Uncached opening of libPath
lib = dlOpen(libPath); lib = dlOpen(libPath, true);
} }
} }

View File

@ -78,7 +78,7 @@ bool Foam::dlLibraryTable::open
{ {
if (functionLibName.size()) if (functionLibName.size())
{ {
void* functionLibPtr = dlOpen(functionLibName); void* functionLibPtr = dlOpen(functionLibName, verbose);
if (debug) if (debug)
{ {

View File

@ -197,8 +197,9 @@ bool ping(const string&, const label timeOut=10);
//- Execute the specified command //- Execute the specified command
int system(const std::string& command); int system(const std::string& command);
//- open a shared library. Return handle to library //- open a shared library. Return handle to library. Print error message
void* dlOpen(const fileName& lib); // 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 //- Close a dlopened library using handle. Return true if successful
bool dlClose(void*); bool dlClose(void*);