Announcement

Collapse
No announcement yet.

libEXIF linker error

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • libEXIF linker error

    Hi

    Ich entwickel an einer Software, die unter anderem auch EXIF-Daten aus JPEGs auslesen soll. Dazu möchte ich libEXIF verwenden.
    Derzeit ist die Funktion sehr überschaubar:
    Code:
    bool __fastcall TRKartenDM::ReadEXIF(AnsiString FileName)
    {
        AnsiString exif_name;
        ExifData *ed;
    
        if (FileName != "")
        {
            exif_name = FileName;
            exif_name = exif_name.LowerCase();
            exif_name = RootDir + exif_name;
        }
        else
        {
            ShowMsg("Es wurde noch keine Datei ausgewählt.", mtINFO);
            return false;
        }
    
        ed = exif_data_new_from_file(exif_name.c_str());
        if (!ed)
        {
            ShowMsg("Datei nicht lesbar oder enthält keine EXIF-Daten.", mtINFO);
            return false;
        }
    
        return true;
    }
    Im Header der Datei wird "exif-data.h" included.
    Der Compiler geht auch brav durch.
    Nun meckert aber der Linker und ich hab keine Ahnung, weshalb er das tut. Bitte um Hilfe.
    Folgende Meldung kommt vom Linker:
    Code:
    [Linker Error] Unresolved external '_exif_data_new_from_file' referenced from RKARTENDMOD.OBJ
    RKartenDMod.cpp ist die Datei aus der die oben aufgeschriebene Funktion stammt.
    Es muss an folgender Zeile liegen:
    Code:
    ed = exif_data_new_from_file(exif_name.c_str());
    Wenn ich diese auskommentiere, kommt kein Fehler.

    Grüße
    mez

  • #2
    Habe 2007 mal das gemacht:

    http://www.marquardtnet.info/cecke/q...quicky_56.html


    Ansonsten dürftest du wohl die LIB nicht mit eingebunden haben...
    Zuletzt editiert von Christian Marquardt; 20.11.2012, 18:35.
    Christian

    Comment


    • #3
      Vielen Dank schonmal.

      Die Lib soll als Package eingebunden werden und da lag mein Fehler. Ich hatte schlichtweg vergessen, dem Package einige Dateien hinzuzufügen.

      Nun aber mein nächstes Problem:
      Wenn ich das Package compilieren will, kommt folgende Fehlermeldung
      Code:
      [C++ Warning] exif_data.c(1178): W8065 Aufruf der Funktion 'N_' ohne Prototyp
      [C++ Warning] exif_data.c(1178): W8069 Nicht-übertragbare Zeigerkonvertierung
      [C++ Error] exif_data.c(1178): E2063 Unzulässige Initialisierung
      Das ganze bezieht sich auf diesen Code:
      Code:
      static const struct {
      	ExifDataOption option;
      	const char *name;
      	const char *description;
      } exif_data_option[] = {
      	{EXIF_DATA_OPTION_IGNORE_UNKNOWN_TAGS, N_("Ignore unknown tags"),
      	 N_("Ignore unknown tags when loading EXIF data.")},
      	{EXIF_DATA_OPTION_FOLLOW_SPECIFICATION, N_("Follow specification"),
      	 N_("Add, correct and remove entries to get EXIF data that follows "
      	    "the specification.")},
      	{EXIF_DATA_OPTION_DONT_CHANGE_MAKER_NOTE, N_("Do not change maker note"),
      	 N_("When loading and resaving Exif data, save the maker note unmodified."
      	    " Be aware that the maker note can get corrupted.")},
      	{0, NULL, NULL}
      };
      Das Ganze ist nur ein Beispiel. Dieser Fehler tritt gehäuft auf. Ähnliches hatte ich zuvor mit einem anderen Fehler, an dem statt dem N_ einfach ein _ stand. Dort hatte der Compiler erklärt, er würde den falschen Datentyp bekommen. Das _ scheint eine Art Pointer oder dergleichen darzustellen. Jedoch kann der BCB6 damit nicht umgehen.
      Es liegt also eindeutig an diesem N_. Dazu eine Frage: Was bezweckt diese Art der Notation?

      Die Lib ist in C geschrieben.

      Ich hoffe, ihr könnt mir auch hierbei weiterhelfen.

      Grüße
      mez

      Comment


      • #4
        Ok, Problem geklärt. Hab was dazu gefunden:
        Internationalization

        Comment

        Working...
        X