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.
Ensuite j'ai compilé avec gcc avec ces deux commandes (que je n'ai pas trop cherché à comprendre, j'ai repris un tuto).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 cython3 fibo.pyx cython3 --embed test_fibo.py -o test.c
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.
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
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
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 emcc test.c $(pkg-config python3 --cflags)
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)
Partager