Programm mit eigener dyn. Lib starten

14/08/2014 - 14:58 von Heinz-Mario Frühbeis | Report spam
Hallo,

mit meinem QT-Creator kann ich ein Programm namens "Earlybite", was
gegen eine eigene dynamische Library gelinkt ist, starten.
Programmpfad: /home/username/EB/IDA/Earlybite/
Lib-Pfad: /home/username/EB/IDA/IDA/

Wenn ich aber im Verzeichnis des Programms per Terminal "./Earlybite"
aufrufe kommt folgendes:

./Earlybite: error while loading shared libraries: libIDA.so.1: cannot
open shared object file: No such file or directory

Im Programm ist wie folgt gelinkt:
A)
unix:!macx: LIBS += -L$$PWD/../IDA/ -lIDA
INCLUDEPATH += $$PWD/../IDA
DEPENDPATH += $$PWD/../IDA

B)
LIBS += -L$$PWD/../../IDA/IDA/ -lIDA -ldl -lpthread -lrt
INCLUDEPATH += $$PWD/../IDA/IDA
DEPENDPATH += $$PWD/../IDA/IDA

Ich habe A + B jeweils probiert...

In der Library:
QT -= core gui
TARGET = IDA
TEMPLATE = lib

DEFINES += IDA_LIBRARY

SOURCES += ida.cpp \
idareg.cpp \
idafunktionen.cpp

HEADERS += ida.h \
hIDAFunk.h

unix {
target.path = /usr/lib
INSTALLS += target
}

Bei target.path habe ich auch schon $$PWD/../IDA und $$PWD/../IDA/IDA
probiert...

Was muss ich denn machen, daß das Programm auch aus dem Terminal heraus
làuft?

Mit Gruß
Heinz-Mario Frühbeis
 

Lesen sie die antworten

#1 Rainer Weikusat
14/08/2014 - 15:38 | Warnen spam
Heinz-Mario Frühbeis writes:
mit meinem QT-Creator kann ich ein Programm namens "Earlybite", was
gegen eine eigene dynamische Library gelinkt ist, starten.
Programmpfad: /home/username/EB/IDA/Earlybite/
Lib-Pfad: /home/username/EB/IDA/IDA/

Wenn ich aber im Verzeichnis des Programms per Terminal "./Earlybite"
aufrufe kommt folgendes:

./Earlybite: error while loading shared libraries: libIDA.so.1: cannot
open shared object file: No such file or directory



Wenn ein dynamisch gelinkted Programm gestarted werden soll muss der
Laufzeit-Binder (runtime linker) alle dafuer notwendigen, anderen
Dateien finden koennen. Per Voreinstellung sucht er solche in /lib und
/usr/lib, zusaetzliche Verzeichnisses koennen hinzugefuegt werden, in
dem man sie in /etc/ld.so.conf eintraegt. Weil ausserdem ein cache
benutzt wird, muss man nach einer Aenderung der effektiven
Bibliotheksmenge, dh neue Bibliothek installiert oder neues Verzeichnis
zum Suchpfad hinzugefuegt, ldconfig ausfuehren.

Alternativen:

- die Umgebungsvariable LD_LIBRARY_PATH kann benutzt werden, um
den Bibliothekssuchpfad fuer einen konkreten Programmaufruf zu
ergaenzen.

- mit Hilfe der Linker-Option -rpath/-R koennen zusaetzlich
Suchpfade in dem Programm selber untergebracht werden.

Ähnliche fragen