Problème compilation CLANG - EMCC
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:
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:
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:
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:
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) |