Wenn Sie passieren -lgsl
, standardmäßig Sie den Linker an finden und Link beantragen, der gemeinsam genutzten Bibliothek libgsl.so
oder die statischen Bibliothek libgsl.a
und die gemeinsame Bibliothek bevorzugen, wenn beide im gleichen Suchverzeichnis zu finden sind. Der Linker sucht zuerst in allen Verzeichnissen, die Sie mit den Optionen -L/path/to/search
, in der von Ihnen angegebenen Reihenfolge angegeben haben, und danach in seinen Standardsuchverzeichnissen (/usr/lib
, usw.). Ebenso für -lgslcblas
.
Wenn Sie jedoch die Verknüpfungsoption -static
an gcc/g++
übergeben, wird verhindert, dass mit beliebigen gemeinsam genutzten Bibliotheken verknüpft wird. Gemeinsame Bibliotheken, libgsl.so
, libgslcblas.so
werden ignoriert. Statische Bibliotheken libgsl.a
, libgslblas.a
, müssen gefunden werden, in einigen oder anderen der Suchverzeichnisse für die Verknüpfung zu erfolgreich.
Der Linker sagt:
/usr/bin/ld: cannot find -lgsl
/usr/bin/ld: cannot find -lgslcblas
, weil es nicht jene statischen Bibliotheken finden können - vermutlich, weil Sie haben sie nicht installiert.
Sie nicht sagen, welche Linux-Distribution Sie arbeiten, aber wenn das Paket die libgsl
und libgslcblas
bietet heißt, sagen wir, libgsl[suffix]
dann wird es ein entsprechendes Paket libgsl-dev
, libgsl-devel
, oder ähnlich bezeichnet werden. Dies wird die Entwicklung Version des Pakets, für den Einsatz von Menschen, die Software entwickeln möchten, die mit libgsl
oder libgslcblas
verbindet. Das Entwicklungspaket benötigt das libgsl
Paket als eine Abhängigkeit - so wird es die gleichen Sachen installieren - und wird zusätzlich die Bibliothek Header-Dateien und die statische Version der Bibliothek enthalten.
Sie müssen also das libgsl
Entwicklungspaket für Ihre Distribution installieren. Für Ubuntu zum Beispiel ist, dass libgsl-dev
:
Später
entnehme ich, dass Ihre Distribution Arch Linux, nicht trennen dev-Pakete macht. Sie müssen die statischen Bibliotheken von der Quelle erstellen. Dazu müssen Sie zumindest müssen installiert haben:
GNU Make
GNU autotools (autoconf, automake, libtool)
GCC (C compiler)
texinfo
dann ein Standard-Build zu machen:
Holen Sie sich das GSL Quellcode-Paket von https://savannah.gnu.org/git/?group=gsl
entweder durch Klonen des git Repo oder Herunterladen eine aktuelle tar.gz
Tarball und extrahieren.
cd
in das Paketverzeichnis.
Lauf ./autogen.sh
. Dies wird gelingen, vorausgesetzt die GNU autotools Voraussetzungen sind erfüllt.
Lauf ./configure --enable-maintainer-mode
(wie ./autogen.sh
haben Sie aufgefordert haben). Dies wird gelingen vorausgesetzt, dass die Paketabhängigkeiten erfüllt sind und Umwelt-Plausibilitätsprüfungen bestehen.
Lauf make
Wenn make
abgeschlossen ist ohne Fehler - die eine Sache von Minuten dauern wird - dann, als root, laufen make install
.
Wenn alles gut geht, wird dies Ihre fehlende statische Bibliotheken installieren:
/usr/local/lib/libgsl.a
/usr/local/lib/libgslcblas.a
Sie sollten nicht Ihre Verknüpfung Befehl für den Linker ändern müssen sie zu finden: /usr/local/lib
ist ein Standard-Linker Suche Pfad.
Vielen Dank für Ihre schnelle Antwort. Es stimmt, ich habe kein 'libgsl.a'. Ich habe Arch Linux, und deshalb habe ich _gsl 2.3-1_ installiert. Aber das Repository hat kein Entwicklungspaket. Können Sie mir sagen, ob [diese Seite] (https://savannah.gnu.org/git/?group=gsl) die richtige ist? –
@ D.Nagel Von [diesem] (http://unix.stackexchange.com/questions/28972/why-are-there-no-dev-packages-in-arch-linux) scheint es, dass Arch Linux nicht t separate dev-Pakete und wenn statische libs nicht im Lagerpaket sind, müssen Sie sie selbst aus der Quelle erstellen. Ihr Link ist korrekt, um die Quelle entweder aus dem Git Repo oder in einem 'tar.gz' zu erhalten. Das Quellpaket ist ein GNU-Autotool-Paket. Weißt du, wie man diese baut? –
Ich habe es versucht, aber nein, ich weiß es nicht. Ich habe _release-2.3_ heruntergeladen, aber es enthielt keine Datei _configure_ nur eine _configure.ac_. Wenn ich 'autoconf configure.ac' starte, erhalte ich einen Fehler. 'configure.ac:6: Fehler: möglicherweise undefined Makro: AM_INIT_AUTOMAKE' ' konfigurieren.ac: 8: Fehler: möglicherweise undefined Makro: AM_MAINTAINER_MODE' –