2017-06-16 2 views
1

En C++, si je veux faire une compilation personnalisée (ce qui signifie pour relier les bibliothèques supplémentaires), je fais habituellement les suivantes:Lier la syntaxe bibliothèque gfortran

g++ filename -o outputname -I/include_libraries_here -L/link_libraries_here -rpath=path_for_dynamic_linking_here 

Comment pourrais-je aller sur le point de faire une chose semblable en utilisant gfortran. J'ai essayé:

gfortran filename -o outputname -I/include_libraries_here -L/link_libraries_here -rpath=path_for_dynamic_linking_here 

Jusqu'à présent, le -I de syntaxe et de travail -L, ce qui suggère que je réussi à relier et inclure les bibliothèques. Cependant, il semble que gfortran ne reconnaisse pas rpath comme une commande valide.

S'il vous plaît faites le moi savoir et merci.

+0

Pourquoi semble t-il? Ce qui se produit? –

+0

Le compilateur a déclaré que rpath n'est pas une commande valide. J'ai aussi essayé d'utiliser juste -R, toujours la même erreur. – mle0312

+0

et qu'en est -Wl, rpath .... ne me souviens pas des détails, je ne l'utilise pas. –

Répondre

1

Vous n'avez pas besoin d'utiliser rpath lors de la liaison. Bien sûr vous pouvez.

Jetez un coup d'oeil ici:

#include <stdio.h> 

void fun() { 
    printf("Hello from C\n"); 
} 

nous pouvons créer lib comme ce partage:

gcc -fPIC -shared -o libfun.so fun.c 

Ensuite, nous pouvons compiler le code suivant:

program hello 
    print *, "Hello World!" 
    call fun() 
end program hello 

comme ceci:

# without -rpath 
gfortran -fno-underscoring -o hello -L. -lfun hello.f90 
# in this case you have to make sure libfun.so is in LD_LIBRARY_PATH 

# with rpath 
gfortran -fno-underscoring -o hello -L. -Wl,-rpath=`pwd` -lfun hello.f90 
# in this case, library will be properly located at runtime 

Cela permettra d'appeler la fonction de partage lib

./hello 
Hello World! 
Hello from C 

-rpath est l'argument de ld

-rpath=dir 
      Add a directory to the runtime library search path. This is used when linking an ELF executable with shared objects. All -rpath arguments are concatenated 
      and passed to the runtime linker, which uses them to locate shared objects at runtime. 

Lien utile:

http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html