none
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol RRS feed

  • Frage

  • Ich habe ein Beispielcode "tlmdif1c.c" ( aus Zip-File CMinpack von http://devernay.free.fr/hacks/cminpack/index.html) in die Quelldatei "TEST1_090712_tlmdif1c_Anzeige.cpp" meiner Win32-Konsolenanwendung eingefügt und wollte es mal laufen lassen.

    Die aufgerufenen Subroutinen "lmdif1", "enorm" sowie "dpmpar" sowie die eingebundenen Headerfiles sind ebenfalls in dem Zip-File CMinpack enthalten.

    Linker-Einstellung: Linker / System / Subsystem: "Konsole (/SUBSYSTEM:CONSOLE)"

    Die Kompilierung des Codes verläuft fehlerfrei.

    Beim Erzeugen des Projektes bekomme ich folgende Fehler:

    1>------ Erstellen gestartet: Projekt: TEST1_090712_tlmdif1c_Anzeige, Konfiguration: Debug Win32 ------

    1> TEST1_090712_tlmdif1c_Anzeige.cpp

    1>TEST1_090712_tlmdif1c_Anzeige.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__enorm" in Funktion "_wmain".

    1>TEST1_090712_tlmdif1c_Anzeige.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__lmdif1" in Funktion "_wmain".

    1>TEST1_090712_tlmdif1c_Anzeige.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__dpmpar" in Funktion "_wmain".

    1>D:\Users\debiegeir\Documents\Visual Studio 2010\Projects\TEST1_090712_tlmdif1c_Anzeige\Debug\TEST1_090712_tlmdif1c_Anzeige.exe : fatal error LNK1120: 3 nicht aufgelöste externe Verweise.

    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    Hier der Code dazu:

    // TEST1_090712_tlmdif1c_Anzeige.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    #include "stdafx.h"
    #include <stdio.h>
    #include <iostream>
    #include <math.h>
    #include <float.h>
    #include <D:CMinPack/CMinpack_Versionen/cminpack-1.3.0/cminpack.h>
    #include <D:CMinPack/CMinpack_Versionen/cminpack-1.3.0/cminpackP.h>
    #include <D:CMinPack/CMinpack_Versionen/cminpack-1.3.0/minpack.h>
    	
    #define real __cminpack_real__
    /* the following struct defines the data points */
    typedef struct  {
        int m;
        real *y;
    } fcndata_t;
    int fcn(void *p, int m, int n, const real *x, real *fvec, int iflag);
    int _tmain()//int argc, _TCHAR* argv[]
    {
    	int info, lwa, iwa[3];
      real tol, fnorm, x[3], fvec[15], wa[75];
      const int m = 15;
      const int n = 3;
      /* auxiliary data (e.g. measurements) */
      real y[15] = {1.4e-1, 1.8e-1, 2.2e-1, 2.5e-1, 2.9e-1, 3.2e-1, 3.5e-1,
                      3.9e-1, 3.7e-1, 5.8e-1, 7.3e-1, 9.6e-1, 1.34, 2.1, 4.39};
      fcndata_t data;
      data.m = m;
      data.y = y;
      /* the following starting values provide a rough fit. */
      x[0] = 1.;
      x[1] = 1.;
      x[2] = 1.;
      lwa = 75;
      /* set tol to the square root of the machine precision.  unless high
         precision solutions are required, this is the recommended
         setting. */
      tol = sqrt(__cminpack_func__(dpmpar)(1));
      info = __cminpack_func__(lmdif1)(fcn, &data, m, n, x, fvec, tol, iwa, wa, lwa);
      fnorm = __cminpack_func__(enorm)(m, fvec); //Definierung in "cminpackP.h"
      printf("      final l2 norm of the residuals\n\n");
      
      printf("      final l2 norm of the residuals%15.7g\n\n",(double)fnorm);
      printf("      exit parameter                %10i\n\n", info);
      printf("      final approximate solution\n\n %15.7g%15.7g%15.7g\n",
    	 (double)x[0], (double)x[1], (double)x[2]);
    	getchar(); // Zum Stoppen des Anzeigefensters
    	return 0;
    }
    int fcn(void *p, int m, int n, const real *x, real *fvec, int iflag)
    {
      /* function fcn for lmdif1 example */
      int i;
      real tmp1,tmp2,tmp3;
      const real *y = ((fcndata_t*)p)->y;
      for (i = 0; i < 15; ++i)
        {
          tmp1 = i + 1;
          tmp2 = 15 - i;
          tmp3 = (i > 7) ? tmp2 : tmp1;
          fvec[i] = y[i] - (x[0] + tmp1/(x[1]*tmp2 + x[2]*tmp3));
        }
      return 0;
    }

    Kann mir da jemand weiterhelfen an was das liegen könnte? Einbindung der Header-Files oder sonstige Pojekt-Einstellungen?

    Oder am Inhalt des Headerfiles..?

    Vielen Dank schon mal!

    Dienstag, 10. Juli 2012 10:08

Antworten

  • Hi,

    die nicht aufgelösten Symbole sind Funktionen, die der Linker sucht, um aus den verschiedenen compilierten Objektdateien eine EXE zu erstellen.

    Entweder du fügst zu deinem Projekt alle C-Dateien hinzu, in welchem die 3 Funktionen implementiert sind oder es gibt bereits eine fertige Bibliothek, welche die Symbole enthält .. habe nur mal kurz das ZIP-File angesehen und ich glaube in deinem Fall sollte ersteres zutreffen.

    Gruß


    When someone helps you, have a heart and try to help others!

    Samstag, 28. Juli 2012 12:32

Alle Antworten

  • Hi,

    die nicht aufgelösten Symbole sind Funktionen, die der Linker sucht, um aus den verschiedenen compilierten Objektdateien eine EXE zu erstellen.

    Entweder du fügst zu deinem Projekt alle C-Dateien hinzu, in welchem die 3 Funktionen implementiert sind oder es gibt bereits eine fertige Bibliothek, welche die Symbole enthält .. habe nur mal kurz das ZIP-File angesehen und ich glaube in deinem Fall sollte ersteres zutreffen.

    Gruß


    When someone helps you, have a heart and try to help others!

    Samstag, 28. Juli 2012 12:32
  • Hallo mxgx,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert


    Robert Breitenhofer, MICROSOFT  Twitter Facebook
    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 9. August 2012 11:21
  • Hi,

    die nicht aufgelösten Symbole sind Funktionen, die der Linker sucht, um aus den verschiedenen compilierten Objektdateien eine EXE zu erstellen.

    Entweder du fügst zu deinem Projekt alle C-Dateien hinzu, in welchem die 3 Funktionen implementiert sind oder es gibt bereits eine fertige Bibliothek, welche die Symbole enthält .. habe nur mal kurz das ZIP-File angesehen und ich glaube in deinem Fall sollte ersteres zutreffen.

    Gruß


    When someone helps you, have a heart and try to help others!

    Hallo,

    ich hätte dazu noch eine zusätzliche Frage, da ich ein ähnliches Problem habe beim Linking von Abaqus mit einer entsprechenden Subroutine. Das Compiling klappt aber dann bekomme ich folgende Fehlermeldung im .log-file der system verification:

    Linking ['std_user.obj'] into user subroutine shared library
    Link command: ['cmd', '/c', '"LINK', '/nologo', '/INCREMENTAL:NO', '/subsystem:console', '/machine:AMD64', '/NODEFAULTLIB:LIBC.LIB', '/NODEFAULTLIB:LIBCMT.LIB', '/DEFAULTLIB:OLDNAMES.LIB', '/DEFAULTLIB:LIBIFCOREMD.LIB', '/DEFAULTLIB:LIBIFPORTMD.LIB', '/DEFAULTLIB:LIBMMD.LIB', '/DEFAULTLIB:MSVCRT.LIB', '/DEFAULTLIB:kernel32.lib', '/DEFAULTLIB:user32.lib', '/DEFAULTLIB:advapi32.lib', '/FIXED:NO', '/dll', '/def:export.def', '/out:standardU.dll', 'std_user.obj', 'C:\\SIMULIA\\Abaqus\\6.10-1\\exec\\lbr\\standardU_static.lib', 'C:\\SIMULIA\\Abaqus\\6.10-1\\exec\\lbr\\standardB.lib', 'C:\\SIMULIA\\Abaqus\\6.10-1\\exec\\lbr\\ABQSMABasCoreUtils_import.lib', 'C:\\SIMULIA\\Abaqus\\6.10-1\\exec\\lbr\\ABQSMAAbuLicense_import.lib', 'oldnames.lib', 'user32.lib', 'ws2_32.lib', 'netapi32.lib', 'advapi32.lib', '&&', 'mt', '/manifest', 'standardU.dll.manifest', '/outputresource:standardU.dll;2', '&&', 'del', 'standardU.dll.manifest"']
       Bibliothek "standardU.lib" und Objekt "standardU.exp" werden erstellt.
    std_user.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "cos" in Funktion "DISP".
    std_user.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "sin" in Funktion "DISP".
    std_user.obj : error LNK2001: Nicht aufgelöstes externes Symbol "_fltused".
    standardU_static.lib(dflux.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_fltused".
    standardU_static.lib(umat_sst.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_fltused".
    standardU_static.lib(stdu_callallutils.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "_fltused".
    LINK : error LNK2001: Nicht aufgelöstes externes Symbol "_DllMainCRTStartup".
    standardU_static.lib(uanisohyper_inv.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "memmove" in Funktion "UANISOHYPER_INV".
    standardU_static.lib(uanisohyper_strain.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "memmove".
    standardU_static.lib(umat_sst.obj) : error LNK2001: Nicht aufgelöstes externes Symbol "memmove".
    standardU.dll : fatal error LNK1120: 5 nicht aufgelöste externe Verweise.
    Abaqus Error: Problem during linking - Abaqus/Standard User Subroutines.
      This error may be due to a mismatch in the Abaqus user subroutine arguments.
      These arguments sometimes change from release to release, so user subroutines
      used with a previous release of Abaqus may need to be adjusted.
    Exception:  (<class 'driverExceptions.LinkError'>, LinkError('Abaqus/Standard User Subroutines',), <traceback object at 0x000007FFFF6941C8>)
    Traceback (most recent call last):
      File "Python/driver/driverAnalysis.py", line 181, in run
      File "Python/driver/driverStandard.py", line 63, in analyze
      File "Python/driver/driverSharedLibrary.py", line 174, in run
      File "Python/driver/driverSharedLibrary.py", line 319, in link
    LinkError: Abaqus/Standard User Subroutines
    Abaqus/Analysis exited with errors

    Wenn ich einen speziellen Job starte, wird die Fehlermeldung konkreter und beschränkt sich auf weitere Ausdrücke die ich in den Subroutinen verwende, beispielsweise sqrt, kann er nicht auflösen.

    Kann ich den Fehler beheben indem ich versuche die entsprechende Bibliothek zu finden und ihren Pfad in den Umgebungsvariablen (LIB Variable) des Systems zu integrieren? Dann müsste er die Bibliothek ja finden, sofern dass der Fehler ist?

    Vielen Dank schon mal und viele Grüße


    Freitag, 5. Juli 2013 11:42
  • Hi,

    in deinem Fall findet er _fltused, cos, sin und memmove nicht, die vermutlich in einer libc.lib enthalten sind, wie hier das schonmal aufgetreten ist: http://forums.codeguru.com/showthread.php?346998-error-LNK2001

    Zudem findet er _DllMainCRTStartup nicht, was evtl. daran liegt, dass versucht wird, eine DLL zu erstellen, aber das Programm eigentlich eine EXE erstellen sollte, denn da unterscheidet sich der Programmstart nicht unerheblich. Siehe beispielsweise hier: http://stackoverflow.com/questions/8460244/create-c-unmanaged-dll-using-vs2010

    Ich hoffe hier damit etwas weitergeholfen zu haben.

    Gruß

    Dienstag, 9. Juli 2013 12:52