Comment faire pour exécuter un programme c avec .si le fichier
Je suis passé par toutes les solutions sur stackoverflow ainsi que de poser ubuntu.
J'ai un programme de go
package main
import "C"
//export Getint
func Getint() int {
return 2
}
func main() {}
et j'ai généré .donc, pour le même nom.t.donc, et le fichier d'en-tête.t.h
Maintenant je voudrais utiliser cette fonction dans mon programme C.
J'ai écrit le code, mais je ne sais pas comment l'exécuter.
#include <stdio.h>
#include <t.h>
int main()
{
int a;
a=Getint();
printf("number : %d",a);
return 0;
}
quand je l'exécuter avec
gcc c.c t.so
elle génère.fichier
mais, au moment de l'exécution d'un../un.il donne une erreur
./a.out
Error while loading shared libraries: t.so: can not open shared object file: no such file or directory exists.
puis j'ai essayé avec
gcc -c c.c -l t.so
de sorte qu'il génère c.o fichier et il n'est pas exécutable.
tous ces fichiers sont dans le même emplacement
OriginalL'auteur NIket | 2016-01-25
Vous devez vous connecter pour publier un commentaire.
Probablement, votre chargeur ne peut pas trouver la bibliothèque. Essayez de mettre le chemin d'accès au répertoire où le libarry est situé à
LD_LIBRARY_PATH
avant d'exécuter le binaire.OriginalL'auteur dmi
Vous devez utiliser le l'option de l'éditeur de liens
-rpath
, qui indique à l'éditeur de liens pour ajouter des informations dans le fichier exécutable du programme où trouver les bibliothèques d'exécution comme votre.so
fichier.Cela peut être fait à l'aide de GCC avec l'option
-Wl
qui indique la GCC frontend programme pour passer d'une option à l'éditeur de liens:Cela va passer
-rpath=$(pwd)
à l'éditeur de liens, et$(pwd)
causes de la coquille d'appeler lepwd
commande pour retourner le répertoire courant.Tant que vous ne bougez pas la bibliothèque le programme devrait fonctionner.
Vous peut utiliser la variable d'environnement
LD_LIBRARY_PATH
trop, mais c'est pas recommandé.OriginalL'auteur Some programmer dude
.si les fichiers sont partagés objet, le sens de l'objet qui sont disponibles pour toutes les applications qui en ont besoin.. qui est, partagé. En raison de cette caractéristique, ils doivent être conservés dans un endroit connu. Aussi, ils ont besoin d'être indexé par l'éditeur de liens dynamique.
Dans linux par exemple, vous avez généralement un fichier /etc/ld..conf où tous les répertoires où des objets partagés sont lus automatiquement sont stockées
Afin que vos options sont les suivantes:
Personnellement, je préfère l'installation de l' .donc, un fichier dans un système de chemin de bibliothèque
OriginalL'auteur Jack
Vous devez utiliser
LD_LIBRARY_PATH
de laisser l'éditeur de liens dynamique trouvez votre bibliothèque partagée dans la liste. La syntaxe est similaire àPATH
une liste de répertoires séparé par:
.Sur OSX cette variable d'environnement est appelé
DYLD_LIBRARY_PATH
.OriginalL'auteur Jean-Baptiste Yunès