clang 'undifined symbol' incomprehension
Bonjour,
Je compile habituellement sur GCC avec comme flag -Wall -Wextra et -Werror. Et jusqu'ici pas de soucis.
Me voici maintenant sur clang et j'obtiens une erreur au moment de la résolution des liens que je n'arrive ni à comprendre, ni à résoudre.. Peut être est-ce parce que je m'y prend mal mais que GCC est gentil?.. Lui!
Cette erreur apparait à chaque fois que j'essaie d'utiliser une variable global déclarée dans une librairie (*.a)
Voici mon test réalisé sur de très petits fichiers pour isolé l'erreur: (2 fichier sources 'test.c' et 'use_test.c' + 1 header 'test.h' pour créer une petite librairie libtest.a) + un fichier 'main.c' qui tente d'utiliser cette librairie..
test.h:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
#ifndef TEST_H
# define TEST_H
# include <stdio.h>
extern int g_test;
int use_global_test(void);
#endif |
test.c:
Code:
1 2 3 4
|
#include "test.h"
int g_test; |
use_test.c:
Code:
1 2 3 4 5 6 7 8 9
|
#include "test.h"
int use_global_test(void)
{
g_test = 42;
printf("g_test successfully affected: `g_test = %d`\n", g_test);
return (0);
} |
La creation de 'libtest.a' (qui ne retourne aucune erreur):
Code:
1 2 3 4 5
|
clang -Wall -Wextra -Werror -o test.o -c test.c -I.
clang -Wall -Wextra -Werror -o use_test.o -c use_test.c -I.
ar rc libtest.a test.o use_test.o |
main.c:
Code:
1 2 3 4 5 6 7 8
|
#include "test.h"
int main(void)
{
use_global_test();
return (0);
} |
Et enfin la compile qui foire:
Code:
1 2
|
clang -Wall -Wextra -Werror -o test main.c -L. -ltest -I. |
L'erreur en question:
Code:
1 2 3 4 5 6
|
Undefined symbols for architecture x86_64:
"_g_test", referenced from:
_use_global_test in libtest.a(use_test.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation) |
Je mettrai le résultat de la compile avec -v si vous ne voyez pas d'énormité de ma part.. Mais elle ne me dit rien de très intéressant..
Merci!