[Linux] Shared Libraries im gleichen Verzeichnis

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

[Linux] Shared Libraries im gleichen Verzeichnis

Beitrag von Glocke » Do Apr 25, 2013 12:05 pm

Hiho, folgendes Beispiel:

utils.hpp

Code: Alles auswählen

#ifndef UTILS_HEADER_GUARD
#define UTILS_HEADER_GUARD

int square(int x);

#endif
utils.cpp

Code: Alles auswählen

#include "utils.hpp"

int square(int x) {
    return x * x;
}
Daraus möchte ich eine Shared Library bauen, was mir mit

Code: Alles auswählen

g++ -fPIC -shared -o libUtils.so utils.cpp
auch gelinkt.

Nur bekomme ich die Shared Library nicht gelinkt:

main.cpp

Code: Alles auswählen

#include <iostream>

#include "utils.hpp"

int main() {
	int x = 3;
	std::cout << x << "^2 = " << square(x) << std::endl;
}

Code: Alles auswählen

g++ -o main main.cpp -lUtils
/usr/bin/ld: cannot find -lUtils
collect2: ld gab 1 als Ende-Status zurück
Ist es generell so, dass meine Shared Libraries in einem bestimmten Verzeichnis liegen müssen, oder bekomme ich es irgendwie so gedreht, dass die .so auch im lokalen Verzeichnis liegen darf? (vgl. DLLs unter Windows) Verbiete ich den Suchpfad mit -L./, bekomme ich für iostream massive Probleme. Offensichtlich setze ich den Pfad so nur, kann aber keinen neuen hinzufügen.

LG Glocke

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [Linux] Shared Libraries im gleichen Verzeichnis

Beitrag von Xin » Do Apr 25, 2013 1:08 pm

Ganz ehrlich: Ich bin mir auch nicht sicher, weil ich unter Linux noch keine .so genutzt habe. ^^

Aber soweit ich weiß, muss die Variable LD_LIBRARY_PATH das Verzeichnis enthalten, das die Libs enthält.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: [Linux] Shared Libraries im gleichen Verzeichnis

Beitrag von Glocke » Do Apr 25, 2013 1:35 pm

Danke für den Hinweis!

Code: Alles auswählen

g++ -fPIC -shared -o libUtils.so utils.cpp
g++ -o main main.cpp -L$PWD -lUtils
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$PWD
Allerdings muss ich - wenn ich den LibPfad nicht global speichere - nach jedem Neustart den Pfad neu ergänzen - oder ein Start-Skript für mein Programm verwenden (das den Pfad anpasst)

LG Glocke

/EDIT: Braucht das Wiki noch einen Artikel zu DLLs / SOs? Wenn ja könnte ich das nachher mal in Angriff nehmen.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [Linux] Shared Libraries im gleichen Verzeichnis

Beitrag von Xin » Do Apr 25, 2013 2:07 pm

Glocke hat geschrieben:Danke für den Hinweis!
Schön, dass mein Halbwissen dazu noch reicht :-D
Glocke hat geschrieben:/EDIT: Braucht das Wiki noch einen Artikel zu DLLs / SOs? Wenn ja könnte ich das nachher mal in Angriff nehmen.
Siehe hier: siehe hier - eine meiner Baustellen, die ich gerne weitergebe.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: [Linux] Shared Libraries im gleichen Verzeichnis

Beitrag von Glocke » Do Apr 25, 2013 6:36 pm

Für alle: ich habe jetzt die beiden Wiki-Artikel von Xin überarbeitet und ersteinmal in meinem eigenen Wiki-Namespace gepostet:

http://www.proggen.org/doku.php?id=user ... :libraries

und dazu die Unter-Artikel:

http://www.proggen.org/doku.php?id=user ... tatic_link und http://www.proggen.org/doku.php?id=user ... namic_link - zum dynamischen Laden (dlopen bzw. das Windows-Äquivalent) schreibe ich demnächst noch etwas.

LG Glocke

Antworten