Probleme compilation MacOSX

Probleme compilation MacOSX - C - Programmation

Marsh Posté le 20-10-2012 à 18:08:41    

Bonjour,
 
je me tourne vers vous afin de savoir si quelqu'un pourrait éclairer ma lanterne.
 
Pour notre cours de parallélisme, nous devons coder en C. Cependant, le programme codé lors de notre TP ne fonctionne pas sous MacOSX mais fonctionne bien sur Windows et Linux.  
Y a-t-il une options spécial a utiliser lors de la compilation sous MacOSX ou bien est-ce un problème lié a MacOSX?
 
Le code a testé sur :
Windows : fonctionne parfaitement.
Linux : fonctionne parfaitement.
MacOSX : mon MBA en 10.8, segfault, le MBP d'une collègue de promo, idem.
 
Merci d'avance pour vos réponses.
 
PS : si ce n'est pas bonne catégorie, ou bien si vous auriez un titre plus explicite pour mon problème, n'hésitez pas a m'en faire part.

Reply

Marsh Posté le 20-10-2012 à 18:08:41   

Reply

Marsh Posté le 20-10-2012 à 19:38:16    

Et tu n'envisages pas la possibilité qu'il y ait une erreur dans ton programme qui ne se révèle pas avec Windows et Linux mais bien avec MacOS? C'est pourtant ce que je ferais en premier.  
 


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 20-10-2012 à 19:42:13    

Je l'ai envisagé, mais ayant relu code maintes fois de coté et mes collègues de leur cotés l'ayant aussi inspecté, nous n'avons rien trouvé de choquant.  
 
C'est une question ouverte que je me pose, et pour en avoir le cœur net, je suis entrain de passer mon Mac sous la version GNU de gcc.

Reply

Marsh Posté le 20-10-2012 à 19:46:22    

Tout à fait d'accord avec le message précédent. Même si il ne faut pas exclure la possibilité que les fonctions appelées aient un fonctionnement différent selon les OS, la première chose à faire serait une passe de valgrind (ou équivalent) pour vérifier qu'il n'y a pas de problèmes dormants dans le code.
 
EDIT : Trop de temps pour taper mon message, et un autre message s'est intercalé :)


Message édité par Farian le 20-10-2012 à 19:47:19
Reply

Marsh Posté le 20-10-2012 à 19:50:04    

Merci pour cette info, je teste de suite.

Reply

Marsh Posté le 20-10-2012 à 20:12:30    

Et regarder où ça crashe dans un débuggeur?
 
(Je ne suis pas un nettement moins grand utilisateur de debuggeurs que la plupart des gens plus jeune que moi, mais l'investigation de départ des crash est une de mes utilisations)


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 20-10-2012 à 20:16:54    

Le code que l'on doit fournir est relativement court (100 lignes de codes max on va dire) et n'ayant pas fait beaucoup de C auparavant, je ne pensais pas que c'était un langage aussi "sensible". Je vais chercher en ce sens.

 

Concernant, le bug, j'ai déjà identifié les lignes responsables mais même en changeant le style de codage, le bug reste le même.


Message édité par serial_xp le 20-10-2012 à 20:19:48
Reply

Marsh Posté le 20-10-2012 à 20:24:31    

> je ne pensais pas que c'était un langage aussi "sensible".  
 
Disons qu'il faut chercher pour trouver plus sensible.
 
> Concernant, le bug, j'ai déjà identifié les lignes responsables mais même en changeant le style de codage, le bug reste le même.
 
Tu peux les donner (dans la balise adéquate) si tu veux.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 20-10-2012 à 20:33:30    

Un Programmeur a écrit :

> je ne pensais pas que c'était un langage aussi "sensible".  
 
Disons qu'il faut chercher pour trouver plus sensible.
 
> Concernant, le bug, j'ai déjà identifié les lignes responsables mais même en changeant le style de codage, le bug reste le même.
 
Tu peux les donner (dans la balise adéquate) si tu veux.


Voila le code : c'est un simple de multiplication de matrice, qui devra être parallélisé par après.
 
exercice3.c:

Code :
  1. #include "exercice3.h"
  2. void print_matrix(matrice *m)
  3. {
  4.     if (m == NULL) {
  5.         fprintf(stdout, "Pas de matrice a afficher!n";);
  6.     }
  7.     else
  8.     {
  9.         int i, j;
  10.         for (i=0; i < m->lines; i++)
  11.         {
  12.             fprintf(stdout, "(";);
  13.             for (j=0; j < m->cols; j++)
  14.             {
  15.                 fprintf(stdout, " %d ", m->value[i][j]);
  16.             }
  17.             fprintf(stdout, ";)n";);
  18.         }
  19.     }
  20. }
  21. matrice* generate_matrix(int lines, int cols)
  22. {
  23.     srand(time(NULL));
  24.     int i, j;
  25.    
  26.     matrice *m = malloc(sizeof(matrice));
  27.     m->cols = cols;
  28.     m->lines = lines;
  29.     m->value = malloc(sizeof(int)*lines);
  30.     for (i=0; i < lines; i++)
  31.     {
  32.         m->value[i] = malloc(sizeof(int)*cols);
  33.         for (j=0; j < cols; j++)
  34.         {
  35.             m->value[i][j] = rand() % (10);
  36.            }
  37.     }
  38.     return m;
  39. }
  40. matrice* multiply_matrix(matrice *m1, matrice *m2)
  41. {
  42.     if (m1->cols == m2->lines)
  43.     {
  44.         int i, j, k, calcul=m2->lines;
  45.    
  46.         matrice *result = generate_matrix(m1->lines, m2->cols);
  47.         for (i=0; i < result->lines;i++)
  48.         {
  49.             for (j=0; j < result->cols; j++)
  50.             {
  51.                 result->value[i][j] = 0;
  52.                 for (k=0; k < calcul; k++)
  53.                 {
  54.                     result->value[i][j] += m1->value[i][k] * m2->value[k][j];
  55.                 }
  56.             }
  57.         }
  58.         return result;
  59.     }
  60.     return NULL;
  61. }


exercice3.h:

Code :
  1. #ifndef EXERCICE_3
  2. #define EXERCICE_3
  3. #include <time.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. struct Matrice{
  7.     int cols;
  8.     int lines;
  9.     int** value;
  10. };
  11. typedef struct Matrice matrice;
  12. void print_matrix(matrice *m);
  13. matrice* generate_matrix(int cols, int lines);
  14. matrice* multiply_matrix(matrice *m1, matrice *m2);
  15. #endif


Message édité par serial_xp le 20-10-2012 à 20:35:40
Reply

Marsh Posté le 20-10-2012 à 20:50:24    

Les mac ne seraient-ils pas en 64 bits alors que Windows et Linux sont en 32?
 

Code :
  1. m->value = malloc(sizeof(int)*lines);


à remplacer par

Code :
  1. m->value = malloc(sizeof(int*)*lines);


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 20-10-2012 à 20:50:24   

Reply

Marsh Posté le 20-10-2012 à 20:52:50    

Pour le linux, je ne sais pas vu que c'était un de mes collègues qui a testé mais oui, tu as raison, mon mac est en 64 bits.

 

c'est résolu... (je me sens vraiment con d'être passé par dessus une bêtise pareil)

 

Merci pour ton aide.


Message édité par serial_xp le 20-10-2012 à 20:54:54
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed