Bonjour,
J'ai installé fftw3 avec fink sur un mac et il est compilé pour l'architecture i386.
J'aimerai l'utiliser sur iPhone donc pour une architecture armv6 armv7. Comment compiler cette library pour l'architecture voulue ?
Merci pour vos réponses
Bonjour,
J'ai installé fftw3 avec fink sur un mac et il est compilé pour l'architecture i386.
J'aimerai l'utiliser sur iPhone donc pour une architecture armv6 armv7. Comment compiler cette library pour l'architecture voulue ?
Merci pour vos réponses
Re-bonjour
J'ai finalement compilé la library avec ./configure make et make install. La library a été compilée pour i386 et j'ai exécuté un script trouvé sur Internet qui m'a recompilé la library pour armv6. J'ai maintenant :
libfftw3.a (for architecture arm): current ar archive random library
libfftw3.a (for architecture i386): current ar archive random library
J'ai ajouté le chemin de cette library dans Library Search Paths et Header Search Paths dans mon projet sous XCode.
Mais le problème persiste. J'ai toujours des choses comme :
Undefined symbols for architecture armv7:
"_fftwf_malloc"
Je n'arrive pas à voir pourquoi ça me met toujours cette erreur ...
Si quelqu'un a un idée ?
Et dans ce cas, quelle est la solution ?
Faire un projet armv6/i386 ou recompiler la library pour armv6/armv7 ?
Bonjour,
Je te remercie pour ta réponse, mais j'ai pas encore réussi à compiler la library pour armv6/armv7 ...
Je me heurte maintenant à un autre problème. Je réutilise des fichiers sources qui vont venir remplacer la fftw3.
Le problème c'est qu'il me dit :
"Undefined symbols for architecture armv7:
"maFonction()", referenced from: ..."
Alors que je ne vois pas où peut être le problème, vu que j'ai juste ajouté des fichiers C, C++ dans mon projet et je n'utilise aucune library autre que celles proposées dans les framework d'XCode.
Bonjour,
Je viens de résoudre mon problème.
En fait, j'appelais des fonctions dans un fichier C à partir d'un fichier .mm
J'ai modifié les extensions .c des fichiers concernés en .cpp et ça marche nickel.
J'en conclue donc qu'il faut faire une couche pour pouvoir garder les fichiers en .c ?
non : mais il faut que le header contenant les définitions des fonctions C contienne une déclaration
extern "C" autour des déclarations de fonctions, sinon les noms de fonctions C sont manglés par le compilateur C++ d'où l'erreur de link.
En général on fait quelque chose du genre :
pour que le header soit compatible avec les 2 compilations.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10#ifdef __cplusplus extern "C" { #endif void myFunction(); #ifdef __cplusplus } #endif
C'est bon, ça marche nickel avec ça.
Je te remercie pour tes réponses !
Partager