Reputation: 402
Since SWIG 4.x is no longer generating PHP wrappers I am trying to interface to the shared library using PHP FFI for openbabel. I wanted to start with something simple so I wanted to just retrieve the version of the library.
** My first question should be can I use FFI to call a C++ shared library?
I tried the following, but it didn't work. Any suggestions?
try {
$ffi = FFI::cdef(
"std::string OBReleaseVersion();",
"/var/www/html/libopenbabel.so");
} catch (Throwable $e) {
var_dump($e);
}
The base.h file contains
#include <openbabel/babelconfig.h>
namespace OpenBabel
{
...
OBAPI std::string OBReleaseVersion();
...
}
The babelconfig.h contains the definition for OBAPI
// If we are using a recent GCC version with visibility support use it
#ifdef HAVE_GCC_VISIBILITY
#define OB_EXPORT __attribute__ ((visibility("default")))
#define OB_IMPORT __attribute__ ((visibility("default")))
#define OB_HIDDEN __attribute__ ((visibility("hidden")))
#elif defined(WIN32) && defined(USING_DYNAMIC_LIBS) && !defined(__MINGW32__)
#define OB_EXPORT __declspec(dllexport)
#define OB_IMPORT __declspec(dllimport)
#define OB_HIDDEN
#else
#define OB_EXPORT
#define OB_IMPORT
#define OB_HIDDEN
#endif
/* Used to export symbols for DLL / shared library builds */
#if defined(MAKE_OBDLL) // e.g. in src/main.cpp
#ifndef OB_EXTERN
#define OB_EXTERN OB_EXPORT extern
#endif
#ifndef OBAPI
#define OBAPI OB_EXPORT
#endif
#ifndef OBCOMMON
#define OBCOMMON OB_EXPORT
#endif
#ifndef OBCONV
#define OBCONV OB_EXPORT
#endif
#ifndef OBERROR
#define OBERROR OB_EXPORT
#endif
#ifndef OBFPRT
#define OBFPRT OB_EXPORT
#endif
#ifndef OBFPTR
#define OBFPTR OB_EXPORT
#endif
#ifndef OBMCDL
#define OBMCDL OB_EXPORT
#endif
#ifndef OBDEPICT
#define OBDEPICT OB_EXPORT
#endif
#else // defined(MAKE_OBDLL)
#ifndef OB_EXTERN
#define OB_EXTERN OB_IMPORT extern
#endif
#ifndef OBAPI
#define OBAPI OB_IMPORT
#endif
#ifndef OBCOMMON
#define OBCOMMON OB_IMPORT
#endif
#ifndef OBCONV
#define OBCONV OB_IMPORT
#endif
#ifndef OBERROR
#define OBERROR OB_IMPORT
#endif
#ifndef OBFPRT
#define OBFPRT OB_IMPORT
#endif
#ifndef OBFPTR
#define OBFPTR OB_IMPORT
#endif
#ifndef OBMCDL
#define OBMCDL OB_IMPORT
#ifndef OBDEPICT
#define OBDEPICT OB_IMPORT
#endif
#endif
#endif
Upvotes: 0
Views: 68