2017-08-30 2 views
0

Je suis passé par de nombreuses questions liées à la liaison d'une bibliothèque de fichiers AC dans StackOverflow, j'ai suivi l'approche comme suiterreur: ne peut pas trouver le fichier libary en essayant de lier le fichier de bibliothèque

Note: Ma bibliothèque Le fichier se trouve au même emplacement que le fichier .c.

Comment résoudre ces erreurs?

  1. Utiliser nom de la bibliothèque avec l'extension

cc consoleDemo.c -L. -lusbcan64.a

-L {chemin vers le fichier bibliothèque contenant} -l $ {} nom de la bibliothèque Ce qui suit est l'erreur de compilation

/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lUSBCAN64.a 
collect2: error: ld returned 1 exit status 
  1. Utilisation du nom de la bibliothèque sans extension

cc consoleDemo.c -L. -lusbcan64

Ce qui suit est l'erreur de compilation

/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible ./libUSBCAN64.a when searching for -lUSBCAN64 
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible ./libUSBCAN64.a when searching for -lUSBCAN64 
/tmp/ccTh3hGd.o:ConsoleDemo.c:(.text+0x2b9): undefined reference to `_kbhit' 
/tmp/ccTh3hGd.o:ConsoleDemo.c:(.text+0x2b9): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `_kbhit' 
/tmp/ccTh3hGd.o:ConsoleDemo.c:(.text+0x2c6): undefined reference to `_getch' 
/tmp/ccTh3hGd.o:ConsoleDemo.c:(.text+0x2c6): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `_getch' 
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b):(.text+0x2): relocation truncated to fit: R_X86_64_32 against symbol `__imp_UcanInitHardware' defined in .idata$5 section in /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b) 
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b):(.text+0x2): relocation truncated to fit: R_X86_64_32 against symbol `__imp_UcanDeinitHardware' defined in .idata$5 section in /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b) 
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b):(.text+0x2): relocation truncated to fit: R_X86_64_32 against symbol `__imp_UcanGetModuleTime' defined in .idata$5 section in /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b) 
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b):(.text+0x2): relocation truncated to fit: R_X86_64_32 against symbol `__imp_UcanInitCanEx2' defined in .idata$5 section in /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b) 
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b):(.text+0x2): relocation truncated to fit: R_X86_64_32 against symbol `__imp_UcanResetCanEx' defined in .idata$5 section in /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b) 
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b):(.text+0x2): relocation truncated to fit: R_X86_64_32 against symbol `__imp_UcanReadCanMsgEx' defined in .idata$5 section in /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b) 
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b):(.text+0x2): relocation truncated to fit: R_X86_64_32 against symbol `__imp_UcanWriteCanMsgEx' defined in .idata$5 section in /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b) 
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b):(.text+0x2): relocation truncated to fit: R_X86_64_32 against symbol `__imp_UcanGetStatusEx' defined in .idata$5 section in /usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b) 
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../lib/USBCAN64.lib(USBCAN64.dll.b):(.text+0x2): additional relocation overflows omitted from the output 
collect2: error: ld returned 1 exit status 
+1

Quelle est la question? –

+0

renommez votre lib à libusbcan32.a, puis essayez cc consoleDemo.c -L. -lusbcan32 – Pras

+0

Quel est le nom actuel de votre fichier '.a'? –

Répondre

0

La première tentative est tout simplement invalide comme option -l et le suffixe .a ne peut pas à la fois être spécifié. Votre deuxième tentative expose trois types de problèmes.

  1. Une version incompatible de libUSBCAN64.a traînant (probablement pour un mauvais OS ou CPU). Pas un gros problème, car vous avez finalement trouvé la bonne version, mais un avertissement ennuyeux. Supprimez simplement le fichier.
  2. Symboles indéfinis pour kbhit et getch. Ce sont des fonctions non standard spécifiques aux produits Microsoft. Vous devez soit lier avec des bibliothèques Microsoft (cela peut ou ne peut pas fonctionner) ou (mieux) éviter ces fonctions et utiliser à la place la norme C.
  3. Déplacements tronqués. Cela peut signifier que votre programme est trop volumineux ou que vous avez utilisé des drapeaux de compilation inappropriés ou un assemblage inline. "Relocalisation de Google tronquée pour s'adapter: R_X86_64_32" et/ou poster une autre question avec ce problème spécifique et votre code source complet et les commandes de construction.