Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 22-10-2018 17:55:08

Anonymous
Membre
Distrib. : Devuan 2.0
Noyau : Linux 4.9.0-8-amd64
(G)UI : XFCE
Inscription : 28-11-2017

Exécutable que le shell refuse de lancer.

Bonjour à tous,

J'ai récemment séparé mon programme en deux parties:
- un exécutable
- une librairie dynamique

Mon programme exécutable est compilé/lié en statique seulement pour deux librairies, les autres sont en lien dynamique. Il n'y a aucune erreur ni warning, mais il ne se lance pas. Le shell me dit "Aucun fichier ou dossier de ce type". Pourtant le fichier est bien présent et avec les droits d'exécution.

Le même programme compilé/lié en dynamique se lance et fonctionne bien.

Voici le code Makefile pour compiler la librairie et le programme:

CFLAGS=-pthread

LIBS=-lxcb -lxcb-shm
LIBS_STATIC=-Wl,-Bstatic -lxcb -lxcb-shm -Wl,-Bdynamic -lXau -lXdmcp

libtest:
    gcc -shared -o ./libtest.so ./libtest.c $(CFLAGS) $(LIBS)
   
test-s:
    gcc -static -o ./test-s ./test.c $(CFLAGS) -L. -Wl,-rpath=. -Wl,-Bdynamic -ltest $(LIBS_STATIC)



Autre problème qui est peut-être lié au précédent: pour que le programme soit lié, j'ai été contraint de lier avec la version dynamique de deux librairies: "-Wl,-Bdynamic -lXau -lXdmcp". Si je compile/lie avec la version statique de ces deux librairies, le linker me demande de recompiler avec -fPIE et lier avec -pie, mais ça ne fonctionne pas à cause de l'option "f" qui serait apparemment incompatible avec une compilation en statique.

Dernière modification par Anonymous (22-10-2018 18:01:44)

Hors ligne

#2 22-10-2018 20:15:44

raleur
Membre
Inscription : 03-10-2014

Re : Exécutable que le shell refuse de lancer.

Tu as essayé de l'exécuter avec strace pour voir où ça coince ?

En ligne

#3 22-10-2018 23:05:37

Anonymous
Membre
Distrib. : Devuan 2.0
Noyau : Linux 4.9.0-8-amd64
(G)UI : XFCE
Inscription : 28-11-2017

Re : Exécutable que le shell refuse de lancer.

Voici le retour de strace:

execve("./test-s", ["./test-s"], [/* 40 vars */]) = -1 ENOENT (No such file or directory)
fstat(2, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
getpid()                                = 2814
exit_group(1)                           = ?
+++ exited with 1 +++
 



Les liens avec les librairies xcb sont en double, c'est peut-être ça qui pose problème à execve, et peut-être aussi au linker malgré qu'il ne renvoie pas d'erreur:


               --> lib_dyn -> (xcb et xcb_shm) en dynamique
éxécutable ----|
               --> (xcb et xcb_shm) en statique
 

Mais bon, un tel schéma ne doit pas avoir d'utilité pratique.

Hors ligne

Pied de page des forums