Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

VC++6 macht Ärger: LNK2001 nichtaufgelöstes externes Symbol...

Empfohlene Antworten

Veröffentlicht

Hallo,

nun saß ich gestern den halben Tag an diesem Fehler und alle Ansatzpunkte, die ich kenne, hab ich mittlerweile ausgeschöpft. :rolleyes:

Die Funktion bzw das Symbol, wonach er sucht, ist in einer proprietären Bibliothek enthalten. Diese hab ich schon mehrfach woanders verwendet, mit Erfolg. Ich hab mir die Fortschrittsinformationen des Linkes ausgeben lassen, bis auf eine einzige Funktion findet er alle. Genau diese, hab ich im Hexeditor nachgeprüft, steht da auch drin, sowohl deklariert als auch definiert.

Ich vermute, dass irgendwas mit den Aufrufkonventionen nicht stimmt. Aber so tief stecke ich noch nicht in C++ drin, daher wollte ich da nicht unüberlegt rangehen.

Der Quellcode ist auch nicht von mir. Ich muss ihn anpassen und "zum laufen kriegen". Meine IDE ist (leider) MS VC++ 6, und ich muss auf Windows XP SP 2entwickeln. Ich habe Folgendes versucht: Bibliotheken im Code über #pragma comment einbinden. Bibliotheken über die Projekteinstellungen einbinden. Sie noch zusätzlich manuell zum Projekt hinzufügen. Das Bibliotheksverzeichnis in den Projekteinstellungen zuerst ohne und dann mit ".\" angegeben. Was gibt es noch, um diesen Fehler wegzukriegen? Hab ich was übersehen?

Viele Grüße,

Arwen

Oh, sorry. :)

parameter.obj : error LNK2001: Nichtaufgeloestes externes Symbol _PNIO_rec_write_req

Debug/vs06_profidrive_v4.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise

Das wäre die Meldung des Linkers. Meinst du mit Signatur die Deklaration aus dem Header oder die gesamte Implementierung der Funktion?

PNIO_UINT32 PNIO_CODE_ATTR PNIO_rec_write_req(

        PNIO_UINT32    Handle,            /* in */

        PNIO_ADDR *    pAddr,             /* in */

        PNIO_UINT32    RecordIndex,       /* in */

        PNIO_REF       ReqRef,            /* in */

        PNIO_UINT32    Length,            /* in */	// max. Laenge 480 Byte

        PNIO_UINT8 *   pBuffer);          /* in */

Ich bin mir nicht sicher, ob das allein hilft... Der Code ist ziemlich tief geschachtelt.

Die Funktion bzw das Symbol, wonach er sucht, ist in einer proprietären Bibliothek enthalten. Diese hab ich schon mehrfach woanders verwendet, mit Erfolg.
Hast du die Bibliothek schon erfolgreich verwendet, oder diese Funtion?

Ich bin mir nicht sicher, ob das allein hilft... Der Code ist ziemlich tief geschachtelt.

Ich wollte nur ausschließen, dass das ein C++-Symbol ist und irgendwas wegen falscher Parametertypen nicht passt. Aber das Symbol ist undekoriert, reines C.

Welche Aufrufkonvention hast du in deinem Projekt eingestellt?

Hast du die Bibliothek schon erfolgreich verwendet, oder diese Funtion?

Sowohl, als auch.

Ich wollte nur ausschließen, dass das ein C++-Symbol ist und irgendwas wegen falscher Parametertypen nicht passt. Aber das Symbol ist undekoriert, reines C.

Welche Aufrufkonvention hast du in deinem Projekt eingestellt?

Derzeit ist /GZ eingestellt, also der stdcall.

Eigentlich sollte das keine Linkerfehler verursachen, aber hast du das mal zum Test auf cdecl umgestellt?

Bist du ganz sicher, dass nicht irgendwoher eine alte Version der Importbibliothek geholt wird?

Danke für den Tipp, ich hab das jetzt mal versucht. Hat leider keinen Erfolg gebracht.

Also ich hab die Bibliothek von Hand in das Projektverzeichnis kopiert und dann diese Stelle angegeben. Was mir aber eben noch einfällt: Ich habe noch 2 dlls mit demselben Namen. Vllt hab ich mir die durch zuviel Rumspielen zerschossen... Wobei ich nicht wüsste, wie. :confused:

Was mir aber eben noch einfällt: Ich habe noch 2 dlls mit demselben Namen. Vllt hab ich mir die durch zuviel Rumspielen zerschossen... Wobei ich nicht wüsste, wie. :confused:

Verwendung unterschiedlicher DLL-Versionen?

Funktionen die in einer version drin sind müssen in der anderen nicht zwingend enthalten sein. ;)

Am besten per Rechtsklick im Explorer mal die Dateiversionsnummern vergleichen.

Hm, die Versionsnummern sind identisch. Also so langsam kommt mir das komisch vor. Vllt kontaktiere ich mal den Entwickler. Oder ich installiere zu Testzwecken den GNU-Compiler, ursprünglich wurde das Ganze unter KDevelop 3 entwickelt. Aber ich kann mir nicht vorstellen, dass es daran liegt. Der Compiler meckert ja nicht (mehr).

Oder ich schreibe alle cpp-Files neu.

Das wär noch ne Idee. Das mach ich gleich mal. Kann zwar ein bisschen dauern weil ich viel drumrumbasteln muss, aber ich hab ja Zeit. :) Ich werde berichten, ob es geklappt hat, danke!

So, nun hab ich mir ein kleines Testprojekt erstellt, in dem ich nur die Funktion teste. Bis auf einen kleinen Speicherfehler :floet: läuft das, also es wird alles korrekt gebunden. Die Funktion wird gefunden.

Also wird es nicht an der Bibliothek liegen, denke ich. :(

Also wird es nicht an der Bibliothek liegen, denke ich. :(

Nein, dann ist es mit hoher Wahrscheinlichkeit ein Problem in den Projekteinstellungen. Du könntest mal die .dsw- und .dsp-Dateien des Problem-Projekts und des Testprojekts mit einem Textvergleichstool abgleichen, ob da irgendwas auffällt.

Hast du eigentlich eine .def-Datei für die Bibliothek?

Ja, hab eine .def-Datei gefunden. Ich kann sie mal posten.

EXPORTS

PNIO_CP_set_appl_watchdog @1

PNIO_CP_trigger_watchdog @2

PNIO_CP_register_cbf @3

PNIO_CP_set_opdone @4

PNIO_CP_cycle_stat @5

PNIO_CP_cycle_info @6

PNIO_data_test @7


PNIO_controller_open @11

PNIO_device_activate @12

PNIO_set_mode @13

PNIO_rec_read_req @14

PNIO_rec_write_req @15

PNIO_ctrl_diag_req @16

PNIO_controller_close @17

PNIO_data_read @18

PNIO_output_data_read @19

PNIO_data_read_cache_refresh @20

PNIO_data_read_cache @21

PNIO_data_write @22

PNIO_data_write_cache_flush @23

PNIO_data_write_cache @24


PNIO_register_cbf @26


PNIO_device_open @41

PNIO_set_appl_state_ready @42

PNIO_device_ar_abort @43

PNIO_device_close @44

PNIO_device_start @45

PNIO_device_stop @46

PNIO_set_dev_state @47

PNIO_api_add @48

PNIO_api_remove @49

PNIO_mod_pull @50

PNIO_sub_pull @51

PNIO_sub_plug @52

PNIO_sub_plug_ext @53


PNIO_mod_plug @55

PNIO_build_channel_properties @56

PNIO_diag_channel_add @57

PNIO_diag_channel_remove @58

PNIO_diag_generic_add @59

PNIO_diag_generic_remove @60

PNIO_diag_ext_channel_add @61

PNIO_diag_ext_channel_remove @62

PNIO_process_alarm_send @63

PNIO_diag_alarm_send @64

PNIO_ret_of_sub_alarm_send @65

PNIO_initiate_data_read @66

PNIO_initiate_data_read_ext @67

PNIO_initiate_data_write @68

PNIO_initiate_data_write_ext @69

PNIO_sub_plug_ext_IM @70



Ich hab die .def noch nie angefasst, und in beiden Projekten ist immer nur die .lib enthalten... Muss ich die .defs auch mit einbinden?

Mir ist gerade aufgefallen, dass in meiner .lib hinter der Funktion steht: @24

In der .def steht aber @15.

Das hat nichts zu bedeuten, oder? Sry für das dauernde Rumgestochere, ich bin gerade sowas von ratlos. :(

Ordinalzahl der Funktion ist 15, laut Depends.

Er gibt mir aber ne Warnung aus: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.

Im Teilfenster drüber ist die MPR.dll rot markiert. Als ich mir dann diese in einem Extrafenster angesehen hab, zeigte er mir im Teilfenster oben rechts die Funktion WNetRestoreConnectionA mit einem roten C-Symbol an (ich hab mit dem Tool noch nie gearbeitet, daher die umständliche Bezeichnung der Fenster :) - das werde ich mir später mal genauer ansehen). Hab ich da was relevantes gefunden?

Wie schaust du dir denn die .lib an? Wo siehst du dieses @24? Denn so sieht es ja danach aus, als ob die Dll nicht zur Lib passt.

Im Hexeditor guck ich mir die an. Da steht überall, wo der Funktionsname steht, Folgendes:

_PNIO_rec_write_req@24__imp__PNIO_rec_write_req@24

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.