Listing 14: ex5lnx.cpp, C++ file on Linux.

// ex5lnx.cpp  —  Test file for calling Muller's method from an F77 dll
#include <iostream>
#include <complex>
#include <cmath>
#include <dlfcn.h>
using namespace std;
complex<double> myFunc(complex<double> &x)
{
    complex<double> temp;
    temp = pow(x - complex<double>(1.0f, 0.0f), 
        complex<double> (10.0f, 0.0f));
    return temp;
}
int main()
{
    void *hDll = dlopen("./muller.so", RTLD_NOW);
    typedef complex<double> (*pFunc) (complex<double>&);
    typedef void (* LPFNDLLFUNC)(pFunc, double&, 
        int&, int&, int&, int&, complex<double>*,int&, int*,int&);
    LPFNDLLFUNC lpFunc = NULL;
    lpFunc = (LPFNDLLFUNC)dlsym(hDll, "muller_");
    pFunc pf = (pFunc) myFunc;
    double eps = 1.0e-10;
    int nsig, kn, nguess, n, itmax, ier;
    nsig = 20;
    kn=0;
    nguess = 0;
    n = 10;
    itmax = 2000;
    ier = 0;
    int infer[10] = {0};
    complex<double> *x;
    x = new complex<double> [n];
    int i;
    for (i=0; i<n; i++)
    {
        x[i] = complex<double> (0.0f, 0.0f);
    }
    lpFunc(pf, eps, nsig, kn, nguess, n, x, itmax, infer, ier);
    for (i=0; i<n; i++)
    {
        std::cout << "x[" << i << "] = " <<  x[i]
                  << ", iteration no. is " 
                  << infer[i] << std::endl;
    }
    delete [] x;
    dlclose(hDll);
    return 0;
}