2010-09-18 4 views
0

Je travaille sur un programme qui utilise le framework Accelerate (pour LAPACK) et j'ai plusieurs problèmes. Le code est écrit en C mais doit inclure des en-têtes C++. J'ai renommé le fichier en .cpp mais il a causé deux erreurs, montrées ci-dessous.Types de données dans Accelerate.framework

C++ Error Image

Je puis RÉALISÉ essayé de #include <Accelerate/Accelerate.h> d'inclure les en-têtes, puisque ce que notre codeur LAPACK a été retapez les définitions (dgemm_(), dposv_(), etc.) au début du fichier et appuyer sur le compilateur/éditeur de liens pour travailler les choses en dehors. Donc j'ai commenté ceux-ci et juste fait le #include. Ce qui est ressorti était le suivant:

Accelerate Error Image

Alors, comment puis-je utiliser les fonctions LAPACK à l'aide dans un Accélérez C++ fichier? Je ne suis pas très familier avec LAPACK, donc je ne suis pas sûr de savoir comment ce cadre fonctionne normalement.

Répondre

2

Vous devez utiliser appeler dgemm_ et dposv_ en utilisant le type __CLPK_integer ou long au lieu de int. L'erreur est parce qu'un long* ne peut pas être implicitement converti en int* en C++.

typedef long int __CLPK_integer; 
typedef long int __CLPK_logical; 
typedef float  __CLPK_real; 
typedef double  __CLPK_doublereal; 
typedef __CLPK_logical (*__CLPK_L_fp)(); 
typedef long int __CLPK_ftnlen; 
+0

Merci, ça m'a beaucoup aidé. Maintenant j'ai juste cette erreur: 'error: 'dgemm_' n'a pas été déclaré dans cette portée'. Intéressant que ça se passe avec dposv_ qui s'appelle quelques lignes plus tôt dans le même bloc de code. –

+0

@jfm: Probablement parce qu'il n'y a pas de 'dgemm_' dans clapack. Il y a 'cblas_dgemm' cependant. – kennytm

+0

Cela aide, mais maintenant: http://cl.ly/2Rc9/ EDIT: pourquoi ne pas utiliser Markdown dans les champs de commentaire? : \ –