Seite 1 von 1

shared library verursacht Absturz

Verfasst: 2. November 2011 09:16
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

Re: shared library verursacht Absturz

Verfasst: 2. November 2011 18:34
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.

Re: shared library verursacht Absturz

Verfasst: 3. November 2011 13:15
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

Re: shared library verursacht Absturz

Verfasst: 3. November 2011 13:51
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...

Re: shared library verursacht Absturz

Verfasst: 3. November 2011 16:06
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