Librairie problème de compilation (ld erreur)

Bonjour à tous,

Description du projet
Aujourd’hui j’écris un petit programme qui doit être capable de lire les informations de Centre d’usinage que l’on trouve dans des usines de mécanique. Pour communiqué avec les machines la société Fanuc fournit une librairie Focas2 que je n’arrive pas incorporer a mon code.

Description du bug
Fanuc donne 2 fichiers :

  • Une entête : fwlib32.h
  • Un fichier .so : libfwlib32.so.1.0.2

Pour préparer ma machine j’ai :

  • Déplacé mon le fichier.so dans /usr/lib
  • Réalisé un sudo ldconfig
xxxxx@debian:/usr/lib$ ls -la | grep fwlib32
lrwxrwxrwx   1 root root       19 30 janv. 15:31 libfwlib32.so.1 -> libfwlib32.so.1.0.2
-rw-r--r--   1 root root  1374274 30 janv. 15:30 libfwlib32.so.1.0.2

Enfin pour compiler j’ai écris :

g++ -Wall src/BddConn.o src/MachConn.o src/Machine.o src/main.o src/utilitaire.o -o app -std=c++11 -lmariadbcpp -lfwlib32

Et il me retourne a chaque fois :

/usr/bin/ld : ne peut pas trouver -lfwlib32 : Aucun fichier ou dossier de ce type
collect2: error: ld returned 1 exit status

Note :

  • OS : Debian SID
  • la compilation sans cette librairie et les fonction associé marche.
  • Le programme fonctionne sans la partie communication machine
  • J’ai réussis a faire un programme similaire sous windows avec la lib prévu pour
  • La documentation linux que fourni Fanuc pour lancer la compil ne marche pas :
    image
    ce qui donne une erreur syntaxe pour le ln

Tu peux nous fournir le retour de ça :

ldvonfig -v | grep libfwlib32
xxxx@debian:~/Documents/CNC Application Development Kit V01.9/FOCAS2 Library/Fwlib/Linux/x86$ sudo ldconfig -v | grep libfwlib32
ldconfig: Ne peut évaluer par stat /usr/local/lib/x86_64-linux-gnu: Aucun fichier ou dossier de ce type
ldconfig: Chemin « /usr/lib/x86_64-linux-gnu » donné plus d'une fois
(de /etc/ld.so.conf.d/x86_64-linux-gnu.conf:4 et /etc/ld.so.conf.d/x86_64-linux-gnu.conf:3)
ldconfig: Chemin « /lib/x86_64-linux-gnu » donné plus d'une fois
(de <builtin>:0 et /etc/ld.so.conf.d/x86_64-linux-gnu.conf:3)
ldconfig: Chemin « /usr/lib/x86_64-linux-gnu » donné plus d'une fois
(de <builtin>:0 et /etc/ld.so.conf.d/x86_64-linux-gnu.conf:3)
ldconfig: Chemin « /usr/lib » donné plus d'une fois
(de <builtin>:0 et <builtin>:0)
ldconfig: /lib/x86_64-linux-gnu/ld-2.33.so is the dynamic linker, ignoring

	libfwlib32.so.1 -> libfwlib32.so.1.0.2

Bonsoir,

j’dis ça j’dis rien (surtout à cette heure), mais si le compilateur veut un fichier fwlib32, ce que tu lui proposes, fwlib32.so.1.0.2, ne lui convient pas…

Pour te conforter dans cette direction, va donc jeter un œil dans le dossier /lib, quelques exemples :

lrwxrwxrwx  1     37 févr. 19  2020 libmenuw.so -> /usr/lib/i386-linux-gnu/libmenuw.so.5
lrwxrwxrwx  1     38 févr. 19  2020 libncursesw.so -> /lib/i386-linux-gnu/libncursesw.so.5.9
lrwxrwxrwx  1     36 févr. 19  2020 libpanelw.so -> /lib/i386-linux-gnu/libpanelw.so.5.9
lrwxrwxrwx  1      9 oct.  30  2016 libusb -> libusb.so
lrwxrwxrwx  1      9 nov.  23  2016 libusb-0.1.so.4 -> libusb.so
lrwxrwxrwx  1     39 oct.  30  2016 libusb.so -> /lib/i386-linux-gnu/libusb-0.1.so.4.4.4

Si j’étais à ta place, je créerais un raccourci fwlib32.so pointant vers fwlib32.so.1.0.2 et si ça ne suffit pas, un autre raccourci fwlib32 pointant vers la même cible.

Ça ne coûte rien d’essayer et si ça ne règle pas le 'blème, tu pourras toujours supprimer le(s) raccourci(s) créé(s).

Le fichier ne s’appelle pas comme ça :

Je me demande si ce n’est pas le préfixe « lib » du nom du fichier qui poserait problème. Essaie de l’enlever (parce qu’il y a assez de « lib » dans le nom du fichier pour qu’on puisse déterminer assez rapidement qu’il s’agit d’une bibliothèque).

1 J'aime

Alors j’ai essayer en créant un lien symbolique dans le dossier lib avec les commande suivante :

xxxx@debian:/usr/lib$ sudo ln -T libfwlib32.so.1.0.2 libfwlib32.so
xxxx@debian:/usr/lib$ sudo chmod 777 libfwlib32.so

Cette fois quand je compile il donne le résultat suivant :

serrea@debian:~/Documents/workspace/focas_linux$ g++ -Wall src/BddConn.o src/MachConn.o src/Machine.o src/main.o src/utilitaire.o -o app -std=c++11 -lmariadbcpp -lfwlib32
/usr/bin/ld : /usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/libfwlib32.so ignoré car incompatible lors de la recherche de -lfwlib32
/usr/bin/ld : /lib/../lib/libfwlib32.so ignoré car incompatible lors de la recherche de -lfwlib32
/usr/bin/ld : /usr/lib/../lib/libfwlib32.so ignoré car incompatible lors de la recherche de -lfwlib32
/usr/bin/ld : /usr/lib/gcc/x86_64-linux-gnu/11/../../../libfwlib32.so ignoré car incompatible lors de la recherche de -lfwlib32
/usr/bin/ld : /lib/libfwlib32.so ignoré car incompatible lors de la recherche de -lfwlib32
/usr/bin/ld : /usr/lib/libfwlib32.so ignoré car incompatible lors de la recherche de -lfwlib32
/usr/bin/ld : ne peut pas trouver -lfwlib32 : Aucun fichier ou dossier de ce type
/usr/bin/ld : /usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/libfwlib32.so ignoré car incompatible lors de la recherche de -lfwlib32
/usr/bin/ld : /lib/../lib/libfwlib32.so ignoré car incompatible lors de la recherche de -lfwlib32
/usr/bin/ld : /usr/lib/../lib/libfwlib32.so ignoré car incompatible lors de la recherche de -lfwlib32
/usr/bin/ld : /usr/lib/gcc/x86_64-linux-gnu/11/../../../libfwlib32.so ignoré car incompatible lors de la recherche de -lfwlib32
/usr/bin/ld : /lib/libfwlib32.so ignoré car incompatible lors de la recherche de -lfwlib32
/usr/bin/ld : /usr/lib/libfwlib32.so ignoré car incompatible lors de la recherche de -lfwlib32
collect2: error: ld returned 1 exit status

le résultat de la commande ls :

xxxx@debian:/usr/lib$ ls -la | grep libfwlib32.so
-rwxrwxrwx   2 root root  1374274 30 janv. 15:30 libfwlib32.so
lrwxrwxrwx   1 root root       19 30 janv. 15:31 libfwlib32.so.1 -> libfwlib32.so.1.0.2
-rwxrwxrwx   2 root root  1374274 30 janv. 15:30 libfwlib32.so.1.0.2

Si je fait la même manip et que j’enlève lib devant le nom de ma lib alors ca ne détect plus la librairie dans le test précédent

Ben oui mais le monsieur il avait dit ce matin de ne pas utiliser « lib » devant…

et ça la détecte comment ? Tu as eu un message d’erreur et tu ne le donnes pas ? On ne peut pas avancer, comme ça.

En résumé,

Ça semble pourtant clair, non ?

Ben oui mais il me semble avoir dit que

et donc le message d’erreur est toujours le même :

/usr/bin/ld : ne peut pas trouver -lfwlib32 : Aucun fichier ou dossier de ce type
collect2: error: ld returned 1 exit status

oui ? et bien éclaire nous de ta sagesse belette expert si c’est aussi simple que ça les problème de linker

Tu as raison : le message d’erreur aurait dû être

Aucun fichier ou dossier de ce nom

Dit autrement, ça donne "je trouve pas fwlib32"
C’est plus clair ?

Bon après un peu de réflexion, d’installation d’une VM 32 bit et un cours sur les library, la réponse est très simple : library pour architecture 32 bit et non 64 bit

Maintenant faut que je trouve une librairie compilé pour du 64 bit