[Qt-interest] How can I use gsl in my Qt application?

ri at eeda.denso.co.jp ri at eeda.denso.co.jp
Mon Jul 6 12:04:18 CEST 2009


Hi.
 
I use cygwin on Windows to get the libgsl.a  from the source code of gsl.
 
I found some c++ sample code using gsl:
 
 
#include <iostream>  // note that .h is omitted
#include <iomanip>  // note that .h is omitted
#include <fstream>  // note that .h is omitted
using namespace std;  // we need this when .h is omitted
 
#include <gsl/gsl_math.h>
#include <gsl/gsl_sum.h>
 
main.cpp
//*********************************************************************//
int main (void)
{
  // evaluating zeta(2) = \sum_{n=1}^{\infty} 1/n^2 
  const double zeta_2_exact = M_PI * M_PI / 6.0; // exact answer
 
  const int N = 20;  // up to N terms
  double t[N];   // array with i'th term
  double sum = 0;  // accumulated sum
  for (int n = 0; n < N; n++)
    {
      double nplus = n + 1.;
      t[n] = 1.0 / (nplus * nplus);
      sum += t[n];
    }
 
  double sum_accel, error;
  gsl_sum_levin_u_workspace *work_ptr = gsl_sum_levin_u_alloc (N);
  gsl_sum_levin_u_accel (t, N, work_ptr, &sum_accel, &error);
 
  cout.setf (ios::fixed, ios::floatfield); // output in fixed format
  cout.precision (18);  // 18 digits in doubles
 
  const int width = 19;
  cout << "term-by-term sum = " << setw (width) << sum
    << " using " << N << " terms" << endl;
 
  cout << "term-by-term sum = " << setw (width) << work_ptr->sum_plain
    << " using " << work_ptr->terms_used << " terms" << endl;
 
  cout << "exact value      = " << setw (width) << zeta_2_exact << endl;
  cout << "accelerated sum  = " << setw (width) << sum_accel << " using "
    << work_ptr->terms_used << " terms" << endl;
 
  cout << "estimated error  = " << setw (width) << error << endl;
  cout << "actual error     = " << setw (width) << sum_accel - zeta_2_exact
    << endl;
 
  gsl_sum_levin_u_free (work_ptr);
  return 0;
}

I wrote a pro file using main.cpp as the only source file:
 
######################################################################
# Automatically generated by qmake (2.01a) ? 7 6 18:47:36 2009
######################################################################
 
TEMPLATE = app
TARGET = 
DEPENDPATH += .
INCLUDEPATH += C:/work/simpleplot/MyWork/gsl/. .
 
win32-g++:LIBS   += -lgsl
 
# Input
SOURCES += main.cpp
 
 
but the compiler complains as:
 
mingw32-make
c:/Qt/2009.02/qt/bin/qmake.exe -win32 -o Makefile gsl.pro
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `c:/work/simpleplot/MyWork/gsl'
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug/gsl.exe debug/main.o  -L'c:/Qt/2009.02/qt/lib' -lmingw32 -lqtmaind -lgsl -lQtGuid4 -lQtCored4
c:/Qt/2009.02/qt/lib/libgsl.a(error.o)(.text+0x43): In function `gsl_error':
/cygdrive/c/work/gsl/err/error.c:43: undefined reference to `__getreent'
c:/Qt/2009.02/qt/lib/libgsl.a(error.o)(.text+0x53):/cygdrive/c/work/gsl/err/error.c:44: undefined reference to `__getreent'
c:/Qt/2009.02/qt/lib/libgsl.a(error.o)(.text+0x7d):/cygdrive/c/work/gsl/err/error.c:45: undefined reference to `__getreent'
c:/Qt/2009.02/qt/lib/libgsl.a(stream.o)(.text+0x82): In function `gsl_stream_printf':
/cygdrive/c/work/gsl/err/stream.c:37: undefined reference to `__getreent'
c:/Qt/2009.02/qt/lib/libgsl.a(stream.o)(.text+0xd1): In function `gsl_set_stream':
/cygdrive/c/work/gsl/err/stream.c:61: undefined reference to `__getreent'
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug/gsl.exe] Error 1
mingw32-make[1]: Leaving directory `c:/work/simpleplot/MyWork/gsl'
mingw32-make: *** [debug] Error 2

 
Can anyone help?
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt-project.org/pipermail/qt-interest-old/attachments/20090706/b1d362fa/attachment.html 


More information about the Qt-interest-old mailing list