2016-11-17 7 views
0

Dies sollte keine schwierige Aufgabe sein, aber ich konnte das Problem für Stunden nicht lösen, also schrieb ich die Frage hier.Wie Standard-Include-und Bibliothekspfad für gcc in Macos für Bash hinzufügen?

Die versuchten Links folgen:
How to include needed C library using gcc?
How to add a default include path for gcc in linux?
http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/Environment-Variables.html#Environment-Variables
how gcc automatically know to include glib library
How to compile gcc with shared library?
http://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html

Wie kann ich die include und lib Pfad für cfitsio Bibliothek für gcc-Compiler?

Versuch:

Ich heruntergeladen und installiert cfitsio in den Pfad ~/Applications. (NOT/Anwendungen übrigens).
Dann Installationsbefehle sind:

sudo ./configure 
sudo make 
sudo make install 

Nun lassen Sie uns sagen, dass ich ein Programm example.c haben.
Kompilieren: gcc -Wall -O3 example.c -lm -lcfitsio
Funktioniert nicht.

jedoch

gcc -Wall -O3 -o example example.c -I /Users/poudel/Applications/cfitsio/include -L /Users/poudel/Applications/cfitsio/lib -lm -lcfitsio 

Works

Jetzt will ich nicht Fahnen verwenden -I und alle Zeiten -L. Wie kann ich das tun?

ich meine ~/.bash_profile mit folgenden Zeilen aktualisiert:

export PATH=$PATH:~/Applications/cfitsio/bin 
export LD_LIBRARY_PATH="~/Applications/cfitsio:$LD_LIBRARY_PATH" 
export LD_LIBRARY_PATH="~/Applications/cfitsio/lib:$LD_LIBRARY_PATH" 
export LD_LIBRARY_PATH="~/Applications/cfitsio/lib/pkgconfig:$LD_LIBRARY_PATH" 
export LD_LIBRARY_PATH="~/Applications/cfitsio/zlib:$LD_LIBRARY_PATH" 

die Pfade überprüfen enthalten nach source ~/.bash_profile läuft ich verwendet:

echo $LD_LIBRARY_PATH 

Dies korrekt die zusätzlichen Pfade zeigt.

Ich habe die Pfade hinzugefügt, aber das nicht funktioniert:

gcc -Wall -O3 -o example example.c -lm -lcfitsio

und wenn ich -I und -L Fahnen mit ihren Pfaden geben es funktioniert.

Können wir etwas tun, das der obige Befehl funktioniert, ohne die Befehle -I und -L zu verwenden?

Hinweis:
Ich habe sogar versucht, die cfitsio aus dem Verzeichnis/usr/local zu installieren.
Ich installierte von/usr/local/cfitsio, aber wieder musste ich -I und -L Befehl mit diesen neuen Standorten verwenden.
Ich bin wirklich sehr frustriert.

Die Hilfe und der Vorschlag werden sehr geschätzt werden! Vielen Dank.

Update:

Ich versuchte dyld stattdessen zu verwenden und hinzugefügt, diese Zeilen in bash_profile:

export PATH="$(pwd):~/Applications/cfitsio/bin:$PATH" 
export PATH="$(pwd):~/Applications/cfitsio/include:$PATH" # fitsio.h is here 
export DYLD_LIBRARY_PATH="~/Applications/cfitsio/lib:$DYLD_LIBRARY_PATH" 
export DYLD_LIBRARY_PATH="~/Applications/cfitsio/zlib:$DYLD_LIBRARY_PATH" 

Allerdings, wenn ich diese Befehle ausführen sie leer Ausgänge zurückzukehren, konnte ich nicht gesetzt dyld Bibliothekspfad diese Wege.

echo $LD_LIBRARY_PATH 
echo $DYLD_LIBRARY_PATH 
+0

Verwenden Sie 'gcc' von XCode oder einer anderen Version? Die Umgebungsvariable auf macOS ist DYLD_LIBRARY_PATH. Können Sie sum-Links in '/ usr/local/lib' installieren, die auf die installierten Bibliotheken verweisen? Können Sie etwas Ähnliches für die Header in '/ usr/local/include' tun, außer dass es wahrscheinlich ein Link zu dem Verzeichnis wäre, in dem Sie cfitsio installiert haben? –

+0

Sie könnten make oder cmake oder pkg-config verwenden [wenn Sie cfitsio mit brew installieren] (https://heasarc.gsfc.nasa.gov/fitsio/fitsio_macosx.html). Sie müssen verstehen, dass Ihr Projekt für die Kompilierung konfiguriert werden muss. Also ja -I und -L und -l sind immer erforderlich. Verwenden Sie keine Umgebungsvariable, um dies zu tun. – Stargateur

+0

@Stargateur, ich habe Homebrew nicht zur Installation von cfitsio verwendet, sondern make install von ihrem offiziellen Quellpaket. –

Antwort

0

Den Vorschlägen von Jonathan Leffler folgend, habe ich einen Weg gefunden.
Ich habe weiche Links erstellt und es hat funktioniert.

sudo ln -s ~/Applications/cfitsio/lib/libcfitsio.a /usr/local/lib/libcfitsio.a 

sudo ln -s ~/Applications/cfitsio/include/*.h /usr/local/include/ 

In der Tat, ich kopiert alle Header-Dateien von

~/Applications/cfitsio/include 

zu

/usr/local/include/ 

und es funktionierte.

Ich nehme an, weiche Links sollten auch funktionieren.
Das könnte eine sehr einfache Lösung sein, aber es hat Stunden gedauert, bis ich es herausgefunden habe.