Alles neu macht der März - auch bei Openindiana

berni51

Open-Net-FreeBSD user
Mein Openindiana-System läuft bisher eigentlich nur wegen pkgsrc einigermassen brauchbar, das OI-Repo selbst ist ganz schön dünn geworden.

Aaaber: Gerade mach ich ein bisschen Systempflege, update-image, update pkg usw. Dann neu gestartet und, nur so zum Spass, mal wieder ein paar Versuche gemacht: pkg install abiword gnumeric gimp geany .......

Und was soll ich sagen: Wurde alles brav installiert. Da waren die Programmierer und Maintainer richtig fleißig. Jetzt krieg ich (fast) ohne pkgsrc so ziemlich alles zusammen, was ich auf dem Desktop brauche. Chapeau, chapeau, da machts doch gleich mehr Spaß.

Nur ein winziger Wermutstropfen: geany startet nicht und ein Aufruf im Terminal sagt mir:
Code:
berni@lian:~$ geany

ld.so.1: geany: fatal: relocation error: file /usr/lib/libgeany.so.0: symbol g_get_os_info: referenced symbol not found

Killed

Ich verstehe zwar ungefähr, was da gemeint ist, aber Abhilfe weiss ich keine. Kann mir einer von euch Programmieren sagen, ob ich hier was machen kann?

Berni
 
Ein System vom Rande der IT-Welt zu nutzen ohne wenigstens rudimentäre Programmierkenntnisse zu haben ist ähm . zumindest ambitioniert. :-)
Anyway.

Die Funktion get_os_info ist aus der GTK-Bibliothek (genauer der Glib). Geany ist ein Gtk-Programm.
Damit die Benutzung möglich ist, muss die Gtk-Bibliothek installiert sein.
Ich gehe aber mal davon aus, das sie das ist weil sonst Deine anderen Gtk-Programme auch nicht funktionieren würden. Trotzdem check das noch mal, ob Gtk, und Gtk-Glib installiert sind und welche Version davon.

Ansonsten wird get_os_info nur an einer Stelle bei Geany gebraucht. Nämlich in src/utils.c für die Funktion
gchar *utils_get_os_info_string(void):
C:
/*
 * Get a string describing the OS.
 *
 * If the OS can be determined, a string which describes the OS will
 * be returned. If no OS can be determined then `NULL` will be returned.
 *
 * @note The format of the returned string is unspecified and is only
 * meant to provide diagnostic information to the user.
 *
 * @return A newly-allocated string containing a description of the
 * OS if it can be determined or `NULL` if it cannot.
 *
 * @since 1.37
 */
gchar *utils_get_os_info_string(void)
{
    gchar *os_info = NULL;

#if GLIB_CHECK_VERSION(2, 64, 0)
# if ! defined(__APPLE__)
    /* on non-macOS operating systems */
    {
        GString *os_str;
        gchar *pretty_name;
        gchar *code_name;

        pretty_name = g_get_os_info(G_OS_INFO_KEY_PRETTY_NAME);
        if (pretty_name == NULL)
            return NULL;

        os_str = g_string_new(pretty_name);
        g_free(pretty_name);

        code_name = g_get_os_info(G_OS_INFO_KEY_VERSION_CODENAME);
        if (code_name != NULL)
        {
            g_string_append_printf(os_str, " (%s)", code_name);
            g_free(code_name);
        }

        os_info = g_string_free(os_str, FALSE);
    }
# else
    /* on macOS, only `G_OS_INFO_KEY_NAME` is supported and returns the
     * fixed string `macOS` */
    os_info = g_get_os_info(G_OS_INFO_KEY_NAME);
# endif
#else
    /* if g_get_os_info() is not available, do it the old-fashioned way */
# if defined(_WIN64)
    os_info = g_strdup("Microsoft Windows (64-bit)");
# elif defined(_WIN32)
    os_info = g_strdup("Microsoft Windows");
# elif defined(__APPLE__)
    os_info = g_strdup("Apple macOS");
# elif defined(__linux__)
    os_info = g_strdup("Linux");
# elif defined(__FreeBSD__)
    os_info = g_strdup("FreeBSD");
# elif defined(__ANDROID__)
    os_info = g_strdup("Android");
# endif
#endif

    return os_info;
}

Die könnte man einfach so abändern, das sie die Funktion get_os_info aus der Glib nicht mehr braucht:
C:
/*
 * Get a string describing the OS.
 *
 * If the OS can be determined, a string which describes the OS will
 * be returned. If no OS can be determined then `NULL` will be returned.
 *
 * @note The format of the returned string is unspecified and is only
 * meant to provide diagnostic information to the user.
 *
 * @return A newly-allocated string containing a description of the
 * OS if it can be determined or `NULL` if it cannot.
 *
 * @since 1.37
 */
gchar *utils_get_os_info_string(void)
{
    gchar *os_info = NULL;
    return os_info;
}
Und dann mal Geany durchkompileren und gucken, ob das das Problem schon löst.
 
kann mich schwach erinnern, dass man zu OpenSolaris/csw-Zeiten manchmal mit LD_LIBRARY_PATH basteln musste, damit die geforderten Libs als erstes gefunden und verwendet werden, ansonsten kam es zu solcherlei Effekten

gibts die Lib ggf zweimal/mehrmals im System?
 
Du meinst die glib? Ja, die gibts tatsächlich zweimal: einmal in /usr/include und einmal in /opt/local/include (aus pkgsrc).
Geany nimmt aber brav die Libraries aus /usr/lib, was ja auch korrekt ist.
 
mach mal als test
Code:
export LD_LIBRARY_PATH=/opt/local/include:$LD_LIBRARY_PATH
und starte dann geany (EDIT: ich sollte dazusagen: aus dieser Konsole)
 
Zuletzt bearbeitet:
Oha, das funktioniert! Dabei kommt der geany überhaupt nicht aus dem pkgsrc-Repo.
Kannst Du das erklären, @turrican ? Wenn nicht, ists auch egal, Hauptsache es läuft.
Dabei hab ich irgendwann mal gelernt, dass man besser die Finger vom LD_LIBRARY_PATH lassen soll.
Besten Dank jedenfalls, der geany ist mir nämlich wirklich wichtig.
 
Da staunt der Laie, und der Fachmann wundert sich...
Hatte mich da wie gesagt etwas schwach an meine OpenSolaris/OI/opencsw Zeit erinnert; warum gerade das sich mit dem geany bei dir so verhaelt, kann ich dir nicht sagen;
ich mutmasse mal, dass die OI glib wirklich zu 'Asbach' fuer den geany (nicht aus pkgsrc) is, die glib aus pkgsrc jedoch 'moderner'?
 
Zurück
Oben