shared library verursacht Absturz

Alles rund um die Programmierung mit Qt
Antworten
GBunge
Beiträge: 30
Registriert: 26. Mai 2008 12:12

shared library verursacht Absturz

Beitrag von GBunge »

Hallo Qt-User,
in den letzten Tage habe ich eine shared library und ein Testprogramm gebaut. Dieses nutzt Funktionen dieser Bibliothek.
Beim Kompilieren beider Projekte werden keine Fehler entdeckt.
Das Testprogramm läuft ohne Crash. Nach dem ich in der ".pro"-Datei eine externe Bibliothek dazu gebunden habe, stürzt das Testprogram ab.
Es wird ein Fehlerbericht mit folgendem Inhalt angezeigt:

Code: Alles auswählen

Process:         LibTest [1366]
Path:            /Users/gb/Develop/Qt/LibTest-build-desktop-Desktop_Qt_4_7_4_for_GCC__Qt_SDK__Debug/LibTest.app/Contents/MacOS/LibTest
Identifier:      LibTest
Version:         ??? (???)
Code Type:       X86-64 (Native)
Parent Process:  Qt Creator [985]

Date/Time:       2011-11-02 09:08:13.600 +0100
OS Version:      Mac OS X 10.6.8 (10K549)
Report Version:  6

Interval Since Last Report:          51546 sec
Crashes Since Last Report:           17
Per-App Interval Since Last Report:  -307 sec
Per-App Crashes Since Last Report:   8
Anonymous UUID:                      D6ED97F4-22F0-4A2B-8937-90FE5DCF0A38

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread:  0

Dyld Error Message:
  Library not loaded: libJulian.1.dylib
  Referenced from: /Users/gb/Develop/Qt/LibTest-build-desktop-Desktop_Qt_4_7_4_for_GCC__Qt_SDK__Debug/LibTest.app/Contents/MacOS/LibTest
  Reason: image not found

Binary Images:
    0x7fff5fc00000 -     0x7fff5fc3bdef  dyld 132.1 (???) <B536F2F1-9DF1-3B6C-1C2C-9075EA219A06> /usr/lib/dyld

Model: MacBookPro4,1, BootROM MBP41.00C1.B03, 2 processors, Intel Core 2 Duo, 2.5 GHz, 4 GB, SMC 1.28f3
Graphics: NVIDIA GeForce 8600M GT, GeForce 8600M GT, PCIe, 512 MB
Memory Module: global_name
AirPort: spairport_wireless_card_type_airport_extreme (0x14E4, 0x8C), Broadcom BCM43xx 1.0 (5.10.131.42.4)
Bluetooth: Version 2.4.5f3, 2 service, 12 devices, 1 incoming serial ports
Network Service: FireWire, FireWire, fw0
Network Service: AirPort, AirPort, en1
Serial ATA Device: Hitachi HTS723232L9SA62, 298,09 GB
Parallel ATA Device: MATSHITADVD-R   UJ-875
USB Device: Built-in iSight, 0x05ac  (Apple Inc.), 0x8502, 0xfd400000 / 2
USB Device: BRCM2046 Hub, 0x0a5c  (Broadcom Corp.), 0x4500, 0x1a100000 / 2
USB Device: Bluetooth USB Host Controller, 0x05ac  (Apple Inc.), 0x820f, 0x1a110000 / 3
USB Device: USB-PS/2 Optical Mouse, 0x046d  (Logitech Inc.), 0xc043, 0x1d100000 / 2
USB Device: Apple Internal Keyboard / Trackpad, 0x05ac  (Apple Inc.), 0x0231, 0x5d200000 / 3
USB Device: IR Receiver, 0x05ac  (Apple Inc.), 0x8242, 0x5d100000 / 2
Wenn ich aus dem Testprogramm alle Referenzen auf die Bibliothek lösche, also wieder den Zustand vor Einbinden der
Bibliothek hergestellt habe, dann "crashed" das Testprogramm trotzdem.

Ich habe keinen Schimmer, was das sein könnte. Wer kann helfen?
Mit freundlichen Grüßen GBunge
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: shared library verursacht Absturz

Beitrag von Christian81 »

Für sowas gibts einen Debugger ... abgesehen davon haben wir keine Glaskugel. Ein minimales Beispiel wäre nicht schlecht. Abgesehen davon sehe ich noch nicht was das mit Qt zu tun haben sollte.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
GBunge
Beiträge: 30
Registriert: 26. Mai 2008 12:12

Re: shared library verursacht Absturz

Beitrag von GBunge »

Christian81 hat geschrieben:Für sowas gibts einen Debugger ... abgesehen davon haben wir keine Glaskugel. Ein minimales Beispiel wäre nicht schlecht. Abgesehen davon sehe ich noch nicht was das mit Qt zu tun haben sollte.

Hi Christian81,
womit hat es denn sonst zu tun, wenn ich mit dem Qt-Creator programmiere?
Ausserdem kann ich den Debugger nicht verwenden, denn das Programm startet garnicht erst.
Der "Chrash" kommt sofort.
Ich schicke das Testprogramm und die Biblithek mit.


Das Testprogramm ( Header und Code ):

Code: Alles auswählen

#ifndef LIBTEST_H
#define LIBTEST_H

#include <QtGui/QApplication>
#include <QWidget>
#include <QLineEdit>

#include <julian_global.h>
#include <julian.h>


namespace Ui { class LibTest; }

class LibTest : public QWidget
{ Q_OBJECT

  public:
    explicit LibTest( QApplication*, QWidget *parent = 0);
    ~LibTest();

  private:
    Ui::LibTest   *ui;
    QApplication  *app;
    QLineEdit     *textOut;
  public slots:
    void on_exitButton_clicked() { app->exit(0);}
    void on_textButton_clicked();
};
#endif // LIBTEST_H

//*****************************************************************************
#include "libtest.h"
#include "ui_libtest.h"

LibTest::LibTest(QApplication *a, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::LibTest)
{app = a;
    ui->setupUi(this);
}

LibTest::~LibTest()
{
    delete ui;
}

void LibTest::on_textButton_clicked()
{ Julian jul;
  QString dat = jul.getDate(0);
  ui->textOut->setText(dat);
}
und die Bibliothek ( Header und Code ):

Code: Alles auswählen

#ifndef JULIAN_H
#define JULIAN_H

#include <QString>

#include "Julian_global.h"

class JULIANSHARED_EXPORT Julian
{ public:
    Julian();
  public:
    QString getDate(long);
};

#endif // JULIAN_H



//*****************************************************************************


#include "julian.h"


Julian::Julian()
{
}

QString Julian::getDate(long)
{ QString dat = "Hallo, was solls!";
  return dat;
}
MfG GBunge
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: shared library verursacht Absturz

Beitrag von solarix »

abgesehen davon, dass du "app" und "textout" nicht brauchst (app: Qt stellt ja bereits "qApp" zur Verfügung, textout: nicht benutzte Variabel), sehe ich auf Anhieb nichts gefährliches. Kannst du das Projekt vollständig (mit "main.cc" und zugehörigen Qt-Profiles) zeigen (oder als Attachment anbieten)? Sonst müssen wir den Rest (und daher auch evt. den Fehler) aus unseren Kristallkugeln erraten...
Kretikus
Beiträge: 1
Registriert: 2. November 2011 12:47

Re: shared library verursacht Absturz

Beitrag von Kretikus »

GBunge hat geschrieben:Hallo Qt-User,
in den letzten Tage habe ich eine shared library und ein Testprogramm gebaut. Dieses nutzt Funktionen dieser Bibliothek.
Beim Kompilieren beider Projekte werden keine Fehler entdeckt.
Das Testprogramm läuft ohne Crash. Nach dem ich in der ".pro"-Datei eine externe Bibliothek dazu gebunden habe, stürzt das Testprogram ab.
Es wird ein Fehlerbericht mit folgendem Inhalt angezeigt:

Code: Alles auswählen

Dyld Error Message:
  Library not loaded: libJulian.1.dylib
  Referenced from: /Users/gb/Develop/Qt/LibTest-build-desktop-Desktop_Qt_4_7_4_for_GCC__Qt_SDK__Debug/LibTest.app/Contents/MacOS/LibTest
  Reason: image not found
Wenn ich aus dem Testprogramm alle Referenzen auf die Bibliothek lösche, also wieder den Zustand vor Einbinden der
Bibliothek hergestellt habe, dann "crashed" das Testprogramm trotzdem.

Ich habe keinen Schimmer, was das sein könnte. Wer kann helfen?
Mit freundlichen Grüßen GBunge
Hi,

so wie es aussieht findet deine Executable die Bibliothek "libJulian.1.dylib" nicht: "Reason: image not found".
Für diese Zwecke finde ich das Kommandozeilentool "otool" sehr hilfreich.

Mac OS X speichert die Orte der benutzten Bibliotheken in der Binärdatei selber. Du kannst mit:

Code: Alles auswählen

otool -L path/to/execuatable
otool -L path/to/shared_library
die Liste der Libraries sehen die beim Laden der Executable oder der Shared Library eingeladen werden.
Probier damit mal rauszufinden wo das System bei deinem Projekt die Libraries sucht.
Du kannst nachträglich die Suchpfade mit dem Tool "install_name_tool" ändern.

Die Qt-Dokumentation hat auch ein wenig darüber zu berichten:
http://doc.qt.nokia.com/stable/deployment-mac.html

Hoffe damit kommst Du weiter,

Kretikus
Antworten