J'ai couru en question bizarre où je dois passer -lm à clang pour qu'il compiler le code:Pourquoi clang nécessite -lm contrairement à gcc?
gcc test.c -o test #works
clang test.c -o test #doesn't work
clang -lm test.c -o test #works
#include <stdio.h>
#include <complex.h>
int main() {
double complex z = 1.0 + 3.0 * I;
double complex conjugate = conj(z);
printf("The conjugate of Z is = %.2f %+.2fi\n", creal(conjugate), cimag(conjugate));
return 0;
}
Plus précisément, il y a erreur de liens:
/tmp/test-561678.o: In function `main':
test.c:(.text+0x4a): undefined reference to `conj'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
important chose que je remarque est que dans ce cas gcc est capable de surpasser clang facilement, car inline gcc fonction des appels alors que clang ne:
clang:
$ nm -g test
0000000000601048 B __bss_start
U [email protected]@GLIBC_2.2.5
...
gcc:
$ nm -g test
0000000000601038 B __bss_start
...
J'utilise Kubuntu 16.04. Version Clang 3.8 et version 5.4.0 gcc.
Existe-t-il un moyen de faire des appels en ligne avec ces fonctions?
Parce qu'ils sont différents compilateurs et ont différentes implémentations des bibliothèques? –
@AjayBrahmakshatriya Ce n'est pas du tout un problème de bibliothèque. C'est une extension de GCC - GCC fournit de nombreuses fonctions intégrées. –
@AndrewHenle par bibliothèque Je ne voulais pas dire les fichiers lib réels (ou si). Je voulais dire que la bibliothèque utilisait des nombres complexes. On l'implémente à travers des builtins, d'autres en utilisant des appels de fonctions. J'ai utilisé des formulations incorrectes. –