Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2006
    Messages : 368
    Points : 283
    Points
    283

    Par défaut 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 : 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)

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2006
    Messages : 368
    Points : 283
    Points
    283

    Par défaut Finalement... EMCC

    Finalement j'ai réussi à compiler avec CLANG en faisant ceci, il suffisait de fournir la librairie correctement
    clang test.c -o test $(pkg-config python3 --cflags) -lpython3.5m

    Pour l'exécuter ensuite j'ai utilisé le .so généré à partir de gcc et ça marche.

    Maintenant mon problème est emscripten qui ne se comporte pas du tout comme je l'aurais imaginé...

    j'ai pour l'instant un warning identifiable + tout un tas d'erreur ensuite, mais je pense que si on trouve le pourquoi du warning, le reste va suivre !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    emcc test.c -o test.js $(pkg-config python3 --cflags) -lpython3.5m
    WARNING:root:emcc: cannot find library "python3.5m"

Discussions similaires

  1. [VB5] Problème compilation, ocx manquants
    Par rastali dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/10/2005, 14h39
  2. [Kylix] Problème de compilation
    Par rabbi_jaccob dans le forum EDI
    Réponses: 3
    Dernier message: 25/07/2005, 23h36
  3. Problème compilation (toolkit Maximum Entropy)
    Par yannick_frere dans le forum MFC
    Réponses: 4
    Dernier message: 07/03/2005, 09h47
  4. Problème compilation Version 8.0.1 sous Debian Sarge
    Par LIndien dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 04/02/2005, 21h38
  5. [Kylix] problème compilation kylix3 avec redhat 9.0
    Par madininaoursa dans le forum EDI
    Réponses: 1
    Dernier message: 02/07/2003, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo