Anlaufschwierigkeiten beim Linken (VC++ 2005)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Anlaufschwierigkeiten beim Linken (VC++ 2005)

    Hi.
    Ich bin neu hier, am Anfang meiner Programmiererfahrungen und mit allem, was über den Lehrstoff an C++ Code hinaus geht (und auch einigem, was gelehrt wurde) ziemlich unfirm.

    Somit verzeiht, wenn ich mich wie ein Idiot aufführe :)


    Folgendes Problem habe ich im Moment:
    Ich habe in VC++ 2005 Express ein Projekt erstellt und im Linker die im Projektverzeichnis situierte "libmocap.lib" verlinkt.
    Vom Compiler bekomme ich jetzt keine Fehlermeldungen mehr (das hat mich schon Tage gekostet, weil ich immer auf die falschest möglichen Wege linken wollte), aber plötzlich meint der Linker:

    LINK : fatal error LNK1104: cannot open file 'uuid.lib'


    Jetzt weiss ich spontan nicht, woher das kommen mag, da weder in den Projektsettings, noch im Code irgendwo dieses File auftaucht... kann das vllt an der libmocap.lib liegen? Kann also eine lib ne andere lib per Präprozessoranweisung verlangen? Oder ist wieder was kaputt?


    Anbei habe ich mal die benutzte lib samt header angeschnürt. Das Projekt (CLR Console application) selber hat keine weiteren Besonderheiten... System.dll wird geused.



    Danke fürs Helfen schonmal im voraus ^^
    Dateien
    • lecker_kram.rar

      (38,14 kB, 303 mal heruntergeladen, zuletzt: )
    Hey morons, let's get a move on before the other moron does something especially moronic.
  • So wie es aussieht musst du noch das PSDK installieren.
    Bei Visual C++ Express hast du standardmäßig nichts Windowsspezifisches dabei.

    Hab den Header der Lib nur kurz überflogen,aber da ist ja zumindest schonmal von Sockets die Rede.Die benötigten Dateien dafür hast du bei VC++ Express,"ab Werk", nicht dabei.

    Wenn du VC++ Express öffnest müsste direkt links auf der Startseite nen Link zu finden sein wie du das PSDK installierst.

    PS:Mit pragma kann man auch aus dem Quellcode raus andere Libs einbinden,bzw. Libs können Abhängigkeiten zu anderen Libs haben.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • Danke schonmal für den Tipp mit dem PSDK :)

    Geht es dann bei dir? Also ich habs jetzt mal von null an probiert: neues Projekt und nur die lib verlinkt und den Header rein... Danach einfach mal CapServe("foo"); gemacht.


    Ergebnis:

    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__listen@8 referenced in function _CapCreateInetSocket
    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__closesocket@4 referenced in function _CapCreateInetSocket
    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__bind@12 referenced in function _CapCreateInetSocket
    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__htonl@4 referenced in function _CapCreateInetSocket
    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__socket@12 referenced in function _CapCreateInetSocket
    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__getservbyname@8 referenced in function _CapCreateInetSocket
    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__htons@4 referenced in function _CapCreateInetSocket
    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__getsockname@12 referenced in function _CapCreateUnixSocket
    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__ntohl@4 referenced in function _CapGetCommand
    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__gethostname@8 referenced in function _CapGetAuthInfo
    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__gethostbyaddr@12 referenced in function _CapGetAuthInfo
    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__getpeername@12 referenced in function _CapGetAuthInfo
    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__setsockopt@20 referenced in function _CapServe
    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__WSAGetLastError@0 referenced in function _CapServe
    libmocap.lib(capserver.obj) : error LNK2019: unresolved external symbol __imp__accept@12 referenced in function _CapServe
    libmocap.lib(init.obj) : error LNK2019: unresolved external symbol __imp__WSAStartup@8 referenced in function "public: __thiscall TmocapInitializer::TmocapInitializer(void)" (??0TmocapInitializer@@QAE@XZ)
    libmocap.lib(init.obj) : error LNK2019: unresolved external symbol __imp__WSACleanup@0 referenced in function "public: __thiscall TmocapInitializer::~TmocapInitializer(void)" (??1TmocapInitializer@@QAE@XZ)
    libmocap.lib(caputil.obj) : error LNK2019: unresolved external symbol __imp__recv@16 referenced in function __CapRead
    libmocap.lib(caputil.obj) : error LNK2019: unresolved external symbol __imp__WSASetLastError@4 referenced in function __CapReadTimeout
    libmocap.lib(caputil.obj) : error LNK2019: unresolved external symbol __imp__select@20 referenced in function __CapReadTimeout
    libmocap.lib(caputil.obj) : error LNK2019: unresolved external symbol __imp__send@16 referenced in function __CapWrite


    Suggestions? :-/

    Edit: Ich weiss nicht wirklich, ob es richtig war, die uuid.lib einfach in mein Projektverzeichnis zu kopieren... aber ich hab nix gefunden, Pfade zu nem Libraryfundus anzugeben.
    Hey morons, let's get a move on before the other moron does something especially moronic.
  • Ach du hast das PSDK schon?
    Dann musst du VC++ noch die Pfade zu den includes und libs bekannt machen.

    Extras->Optionen->Projekte und Projektmappen->VC++ Verzeichnisse

    EDIT: Hab dein EDIT gerade erst gelesen...

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • Sehr schön, jetzt ist das wenigstens mal alles aufgeräumter ^^
    Aber leider kommen immernoch die Linkerfehler, wenn ich versuche, eine Funktion der Library aufzurufen.

    Also offenbar ist die lib ordentlich drinne und es wird auch alles gefunden, nur sobald ich eine Funktion nutzen will, kennt er irgendwelche Identifier nicht... kann es sein, dass ich jetzt noch irgendwelche dlls dafür reinholen muss?

    Sorry für diese Fragen, aber google sagt nix vernünftiges mehr und MSDN spricht chinesisch T_T
    Hey morons, let's get a move on before the other moron does something especially moronic.
  • Bist du genau der Anleitung in dem Link gefolgt wie das PSDK in VC++ zu integrieren ist?
    Hast du in dem einem Manifestfile die Änderungen durchgeführt?
    Wie sehen denn die Linkerfehler aus?
    Kannst du jetzt mit VC++Ex Dll´s und WinApi Anwendungen erstellen?
    Ich kann das hier nicht mehr nachvollziehen weil ich mittlerweile nen "richtiges" Studio habe.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • Ja, habe die Änderungen alle durchgeführt...
    Die Fehler sind noch die selben wie in meinem 2ten Post im Qutoe ^^
    Immer halt wenn ich ne Function (z.B. int i = CapServe("foo");) der libmocap nutzen will kommt er auf diese Fehler. Die Datentypen der lib kann ich - stichprobenartig - problemlos nutzen.

    Ich habe auch nochmal eine Win32 Cocole Application mit den neuen Settings des PSDK als neues Projekt erstellt. Dort kollidieren dann die Nutzungen von libs, wahrscheinlich, weil die uuid.lib schon standardmässig gelinkt wird und dann von der libmocap nochmal.

    Was ich im Moment mache ist halt Rumexperimentieren, aber in etwa bleiben die Fehler immer die selben. Ein Linkerfehler ist jetzt weniger, dafür eben die Warnung, dass libs mehrfach offen sind O_o


    Ich weiss, dass meine Fragen ziemlich newbig sind... ich will ja auch garnet so stressen, drum würde es mir schon reichen, wenn mir jemand sagen kann, wo ich mal online ne Einführung ins Linken und Debugging von Verlinktem sehen kann... und möglichst nicht das was man so standardmässig im msdn findet ^^


    Danke auf jedem Fall erstmal an void, hast mich schon weiter gebracht :)


    EDIT: Ja, dlls und libs erlaubt er mir, zu bauen ^^
    Hey morons, let's get a move on before the other moron does something especially moronic.
  • Ach ja,
    den Konflikt zwischen MSVCRT und deiner Lib kannst du (sofern es denn notwendig werden sollte) mit NODEFAULTLIB aus dem Weg räumen.
    Könnte z.B. Probleme geben wenn du Objekte deletest die von der Lib mit einer anderen C Runtime per new erstellt wurden.
    Aber das lass erstmal auf dich zukommen....
    Fürs erste würde ich die Warnung ignorieren und abwarten ob es im Release immer noch so aussieht.


    EDIT:Die MSDN Library ist nicht so schlecht.Es braucht nur etwas Gewöhnungszeit damit zu arbeiten.Dann ist es aber ne wirklich informative Fundgrube.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • Weeeheee!
    Wunderbar, es linkt :)

    Nur noch 2 Fragen:
    Erstens: Wie kommt man auf die Lösung? (Erfahrung oder gibts da ein System?)

    Zweitens:
    Übrig bleiben Warungen (Pfade gekürzt):
    libmocap.lib(init.obj) : warning LNK4099: PDB 'init.pdb' was not found with 'C:\[...]\libmocap.lib' or at 'c:\[...]\Debug\init.pdb'; linking object as if no debug info
    libmocap.lib(caputil.obj) : warning LNK4099: PDB 'caputil.pdb' was not found with 'C:\[...]\libmocap.lib' or at 'c:\[...]\Debug\caputil.pdb'; linking object as if no debug info
    libmocap.lib(capserver.obj) : warning LNK4099: PDB 'capserver.pdb' was not found with 'C:\[...]\libmocap.lib' or at 'c:\[...]\Debug\capserver.pdb'; linking object as if no debug info

    Schlimm?

    Und dickes Danke nochmal... du hast mir mindestens ne Woche gespart... ich find einfach keine ordentlichen HowTos... weil für reine Dokus fühl ich mich zu newbig :(
    Hey morons, let's get a move on before the other moron does something especially moronic.
  • Naja,
    das sind alles WinSock Funktionen die er nicht auflösen kann.
    Mit nem bißchen Erfahrung im Bereich Windowsprogrammierung "sieht" man das dann schon.
    Die restlichen Warnungen sehe ich als "ignorierbar" an.
    Bleib am Ball,das wird schon :) .

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • Hmm...
    jetzt bin ich mal anders rangegangen und habe den VSVC++ Maya Application Wizard ausprobiert. Sind folgende Fehler Standard (sieht nach Windowskram aus) und schnell behebbar oder scheint es was Maya-API spezifischem zu liegen?
    Weil wenn das jetzt wieder n Brocken wird, mach ichs lieber ohne den AppWiz zu Fuss ^^

    Linking...
    Creating library Debug/myCmd.lib and object Debug/myCmd.exp
    pluginMain.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall MObject::~MObject(void)" (__imp_??1MObject@@QAE@XZ) referenced in function "class MStatus __cdecl initializePlugin(class MObject)" (?initializePlugin@@YA?AVMStatus@@VMObject@@@Z)
    pluginMain.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall MFnPlugin::~MFnPlugin(void)" (__imp_??1MFnPlugin@@UAE@XZ) referenced in function "class MStatus __cdecl initializePlugin(class MObject)"
    (?initializePlugin@@YA?AVMStatus@@VMObject@@@Z)
    pluginMain.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall MStatus::MStatus(class MStatus const &)" (__imp_??0MStatus@@QAE@ABV0@@Z) referenced in function "class MStatus __cdecl initializePlugin(class MObject)" (?initializePlugin@@YA?AVMStatus@@VMObject@@@Z)
    pluginMain.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall MFnPlugin::MFnPlugin(class MObject &,char const *,char const *,char const *,class MStatus *)" (__imp_??0MFnPlugin@@QAE@AAVMObject@@PBD11PAVMStatus@@@Z) referenced in function "class MStatus __cdecl initializePlugin(class MObject)" (?initializePlugin@@YA?AVMStatus@@VMObject@@@Z)
    pluginMain.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall MStatus::MStatus(void)" (__imp_??0MStatus@@QAE@XZ) referenced in function "class MStatus __cdecl initializePlugin(class MObject)" (?initializePlugin@@YA?AVMStatus@@VMObject@@@Z)
    Debug\myCmd.mll : fatal error LNK1120: 5 unresolved externals


    EDIT: Hat sich erledigt... der AppWiz lässt ungültige Einstellungen zu -.-
    Hey morons, let's get a move on before the other moron does something especially moronic.