Bonjour,
Je ne sais pas trop sur quel forum poster parce que mon problème est à plusieurs étages et c'est plus un problème de compil que de C.
Mais comme c'est à la compilation du fichier C que ça déconne j'ai posté ici.
De plus je n'ai pas l'habitude de compiler des choses à la main (débutant complet là dessus)
Merci aux costaud(e)s de la compil qui pourraient jeter un oeil !

Explications :
J'ai compilé deux fichiers python avec Cython en .c cela fonctionne à merveille. Le deuxième est compilé avec --embed pour avoir un main.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
cython3 fibo.pyx
cython3 --embed test_fibo.py -o test.c
Ensuite j'ai compilé avec gcc avec ces deux commandes (que je n'ai pas trop cherché à comprendre, j'ai repris un tuto).
Tout ce que je sais c'est que l'un me fait un .exe et l'autre un .so. et qu'à la fin il y a un -l pour qu'il sache quelle librairie utiliser.
Jusqu'ici tout va bien.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
gcc fibo.c -o fibo.so -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing $(pkg-config python3 --cflags) -lpython3.5m
gcc test.c -o test $(pkg-config python3 --cflags) -lpython3.5m
Comme mon but ext de transformer ça pour faire de l'asmjs, j'ai essayé de compiler avec emcc, ça n'a pas marché avec la commande la plus simple voici.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
emcc test.c $(pkg-config python3 --cflags)
donc j'ai coulu voir la compilation clang, comme ça passe tous les deux par llvm... et j'ai eu le même genre d'erreur, je mets celle-ci plutôt que celle de emcc car j'imagine qu'il y a plus de gens qui connaissent, à mon avis la solution sera la même.
J'imagine que c'est le même genre de problème qu'avec gcc (indiquer une bibliothèque) mais je ne sais pas comment faire. voici la ligne de commande et l'erreur qui en découle j'ai rajouté le -v pour que vous puissiez avoir plus de détails, moi je n'y comprend que dalle sauf qu'il lui manquerait des librairies :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
 
  clang test.c $(pkg-config python3 --cflags) -v
Debian clang version 3.6.2-3 (tags/RELEASE_362/final) (based on LLVM 3.6.2)
Target: x86_64-pc-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.8.5
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/4.9.3
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.5
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9.3
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.3.1
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
 "/usr/lib/llvm-3.6/bin/clang" -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name test.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -target-linker-version 2.25.1 -v -dwarf-column-info -resource-dir /usr/lib/llvm-3.6/bin/../lib/clang/3.6.2 -I /usr/include/python3.5m -I /usr/include/x86_64-linux-gnu/python3.5m -internal-isystem /usr/local/include -internal-isystem /usr/lib/llvm-3.6/bin/../lib/clang/3.6.2/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir /home/dpolizzi/python/cython -ferror-limit 19 -fmessage-length 242 -mstackrealign -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -o /tmp/test-d29e8f.o -x c test.c
clang -cc1 version 3.6.2 based upon LLVM 3.6.2 default target x86_64-pc-linux-gnu
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/python3.5m
 /usr/include/x86_64-linux-gnu/python3.5m
 /usr/local/include
 /usr/lib/llvm-3.6/bin/../lib/clang/3.6.2/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
 "/usr/bin/ld" --hash-style=both --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1/../../../x86_64-linux-gnu/crt1.o /usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1/../../../x86_64-linux-gnu/crti.o /usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1/crtbegin.o -L/usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1 -L/usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1/../../../x86_64-linux-gnu -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1/../../.. -L/usr/lib/llvm-3.6/bin/../lib -L/lib -L/usr/lib /tmp/test-d29e8f.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1/crtend.o /usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1/../../../x86_64-linux-gnu/crtn.o
/tmp/test-d29e8f.o*: Dans la fonction «*PyInit_test_fibo*»*:
test.c:(.text+0x65)*: référence indéfinie vers «*PyTuple_New*»
test.c:(.text+0xcc)*: référence indéfinie vers «*PyBytes_FromStringAndSize*»
test.c:(.text+0x134)*: référence indéfinie vers «*PyModule_Create2*»
test.c:(.text+0x195)*: référence indéfinie vers «*PyModule_GetDict*»
test.c:(.text+0x20d)*: référence indéfinie vers «*PyImport_AddModule*»
test.c:(.text+0x280)*: référence indéfinie vers «*PyObject_SetAttrString*»
test.c:(.text+0x309)*: référence indéfinie vers «*PyObject_SetAttrString*»
test.c:(.text+0x33d)*: référence indéfinie vers «*PyImport_GetModuleDict*»
test.c:(.text+0x39c)*: référence indéfinie vers «*PyDict_GetItemString*»
test.c:(.text+0x3c3)*: référence indéfinie vers «*PyDict_SetItemString*»
test.c:(.text+0x475)*: référence indéfinie vers «*PyList_New*»
test.c:(.text+0x616)*: référence indéfinie vers «*PyDict_SetItem*»
test.c:(.text+0x86e)*: référence indéfinie vers «*PyDict_New*»
test.c:(.text+0x8d3)*: référence indéfinie vers «*PyDict_SetItem*»
test.c:(.text+0xad3)*: référence indéfinie vers «*PyErr_Occurred*»
test.c:(.text+0xaf1)*: référence indéfinie vers «*PyExc_ImportError*»
test.c:(.text+0xaf6)*: référence indéfinie vers «*PyErr_SetString*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_check_binary_version*»*:
test.c:(.text+0xb4e)*: référence indéfinie vers «*PyOS_snprintf*»
test.c:(.text+0xb64)*: référence indéfinie vers «*Py_GetVersion*»
test.c:(.text+0xb86)*: référence indéfinie vers «*PyOS_snprintf*»
test.c:(.text+0xbe0)*: référence indéfinie vers «*PyOS_snprintf*»
test.c:(.text+0xc01)*: référence indéfinie vers «*PyErr_WarnEx*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_InitGlobals*»*:
test.c:(.text+0xc75)*: référence indéfinie vers «*PyLong_FromLong*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_InitCachedConstants*»*:
test.c:(.text+0xd2a)*: référence indéfinie vers «*PyTuple_Pack*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_Import*»*:
test.c:(.text+0xe03)*: référence indéfinie vers «*PyList_New*»
test.c:(.text+0xe2f)*: référence indéfinie vers «*PyModule_GetDict*»
test.c:(.text+0xe4b)*: référence indéfinie vers «*PyDict_New*»
test.c:(.text+0xeaa)*: référence indéfinie vers «*PyImport_ImportModuleLevelObject*»
test.c:(.text+0xec4)*: référence indéfinie vers «*PyExc_ImportError*»
test.c:(.text+0xec9)*: référence indéfinie vers «*PyErr_ExceptionMatches*»
test.c:(.text+0xede)*: référence indéfinie vers «*PyErr_Clear*»
test.c:(.text+0xf11)*: référence indéfinie vers «*PyImport_ImportModuleLevelObject*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_ImportFrom*»*:
test.c:(.text+0x104e)*: référence indéfinie vers «*PyExc_AttributeError*»
test.c:(.text+0x1053)*: référence indéfinie vers «*PyErr_ExceptionMatches*»
test.c:(.text+0x1070)*: référence indéfinie vers «*PyExc_ImportError*»
test.c:(.text+0x107b)*: référence indéfinie vers «*PyErr_Format*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_GetModuleGlobalName*»*:
test.c:(.text+0x10a9)*: référence indéfinie vers «*PyDict_GetItem*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_PyObject_Call*»*:
test.c:(.text+0x116a)*: référence indéfinie vers «*PyObject_Call*»
test.c:(.text+0x1178)*: référence indéfinie vers «*PyThreadState_Get*»
test.c:(.text+0x118f)*: référence indéfinie vers «*_Py_CheckRecursionLimit*»
test.c:(.text+0x11a7)*: référence indéfinie vers «*_Py_CheckRecursiveCall*»
test.c:(.text+0x11f6)*: référence indéfinie vers «*PyThreadState_Get*»
test.c:(.text+0x1209)*: référence indéfinie vers «*_Py_CheckRecursionLimit*»
test.c:(.text+0x121d)*: référence indéfinie vers «*_Py_CheckRecursionLimit*»
test.c:(.text+0x1231)*: référence indéfinie vers «*_Py_CheckRecursionLimit*»
test.c:(.text+0x1250)*: référence indéfinie vers «*PyThreadState_Get*»
test.c:(.text+0x1284)*: référence indéfinie vers «*PyErr_Occurred*»
test.c:(.text+0x12bd)*: référence indéfinie vers «*PyExc_SystemError*»
test.c:(.text+0x12c2)*: référence indéfinie vers «*PyErr_SetString*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_PrintOne*»*:
test.c:(.text+0x1301)*: référence indéfinie vers «*PyTuple_Pack*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_AddTraceback*»*:
test.c:(.text+0x1467)*: référence indéfinie vers «*PyThreadState_Get*»
test.c:(.text+0x147d)*: référence indéfinie vers «*PyFrame_New*»
test.c:(.text+0x14a7)*: référence indéfinie vers «*PyTraceBack_Here*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_main*»*:
test.c:(.text+0x17d2)*: référence indéfinie vers «*Py_SetProgramName*»
test.c:(.text+0x17d7)*: référence indéfinie vers «*Py_Initialize*»
test.c:(.text+0x17fe)*: référence indéfinie vers «*PySys_SetArgv*»
test.c:(.text+0x181f)*: référence indéfinie vers «*PyErr_Occurred*»
test.c:(.text+0x1830)*: référence indéfinie vers «*PyErr_Print*»
test.c:(.text+0x18ad)*: référence indéfinie vers «*Py_Finalize*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_Print*»*:
test.c:(.text+0x1c91)*: référence indéfinie vers «*PyObject_GetAttr*»
test.c:(.text+0x1ccf)*: référence indéfinie vers «*PyDict_New*»
test.c:(.text+0x1d1d)*: référence indéfinie vers «*PyDict_SetItem*»
test.c:(.text+0x1d69)*: référence indéfinie vers «*PyUnicode_FromStringAndSize*»
test.c:(.text+0x1db0)*: référence indéfinie vers «*PyDict_SetItem*»
test.c:(.text+0x1e94)*: référence indéfinie vers «*PyDict_New*»
test.c:(.text+0x1eeb)*: référence indéfinie vers «*PyUnicode_FromStringAndSize*»
test.c:(.text+0x1f3d)*: référence indéfinie vers «*PyDict_SetItem*»
test.c:(.text+0x200d)*: référence indéfinie vers «*PyObject_Call*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_CreateCodeObjectForTraceback*»*:
test.c:(.text+0x230b)*: référence indéfinie vers «*PyUnicode_FromString*»
test.c:(.text+0x234f)*: référence indéfinie vers «*PyUnicode_FromFormat*»
test.c:(.text+0x2361)*: référence indéfinie vers «*PyUnicode_FromString*»
test.c:(.text+0x243e)*: référence indéfinie vers «*PyCode_New*»
/tmp/test-d29e8f.o*: Dans la fonction «*__pyx_insert_code_object*»*:
test.c:(.text+0x2643)*: référence indéfinie vers «*PyMem_Malloc*»
test.c:(.text+0x27c4)*: référence indéfinie vers «*PyMem_Realloc*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_GetBuiltinName*»*:
test.c:(.text+0x2a38)*: référence indéfinie vers «*PyExc_NameError*»
test.c:(.text+0x2a43)*: référence indéfinie vers «*PyErr_Format*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_PyObject_GetAttrStr*»*:
test.c:(.text+0x2ace)*: référence indéfinie vers «*PyObject_GetAttr*»
/tmp/test-d29e8f.o*: Dans la fonction «*__Pyx_InitStrings*»*:
test.c:(.text+0x2b32)*: référence indéfinie vers «*PyUnicode_InternFromString*»
test.c:(.text+0x2b86)*: référence indéfinie vers «*PyUnicode_Decode*»
test.c:(.text+0x2bb3)*: référence indéfinie vers «*PyUnicode_FromStringAndSize*»
test.c:(.text+0x2be5)*: référence indéfinie vers «*PyBytes_FromStringAndSize*»
clang: error: linker command failed with exit code 1 (use -v to see invocation)