Autodesk 3ds Max Plug-In in 64 bit kompilieren
-
Hallo,
momentan bin ich dabei ein Plug-In für Autodesk 3ds Max in 64 bit zu kompilieren. Dabei arbeite ich mit Visual Studio 2008 und habe auch schon so einige Hürden genommen.
Nun plagt mich leider mal wieder ein Linkerfehler bei dem ich einfach nicht weiterkomme. Ich habe noch nicht sehr viel Erfahrung mit C++ und Visual Studio. Vielleicht kann mir jemand weiterhelfen. Ich bin für jeden Tipp dankbar.
Viele Grüße
ChrisHier die Fehlerausgabe:
1>------ Neues Erstellen gestartet: Projekt: pxmCoreMAX, Konfiguration: Debug x64 ------ 1>Die Zwischen- und Ausgabedateien für das Projekt "pxmCoreMAX" mit der Konfiguration "Debug|x64" werden gelöscht. 1>Kompilieren... 1>cl : Command line warning D9035 : option 'Wp64' has been deprecated and will be removed in a future release 1>pxmCoreMAX.cpp 1>pxmCore.cpp 1>DllEntry.cpp 1>Generating Code... 1>Ressourcen werden kompiliert... 1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0 1>Copyright (C) Microsoft Corporation. All rights reserved. 1>Manifest in Ressourcen wird kompiliert... 1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0 1>Copyright (C) Microsoft Corporation. All rights reserved. 1>Verknüpfen... 1> Creating library .\x64\Debug\pxmCoreMAX.lib and object .\x64\Debug\pxmCoreMAX.exp 1>pxmCore.obj : error LNK2019: unresolved external symbol __imp_send referenced in function "void __cdecl sendString(unsigned __int64,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?sendString@@YAX_KV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 1>pxmCore.obj : error LNK2019: unresolved external symbol __imp_WSACleanup referenced in function "unsigned __int64 __cdecl pxmRequest(unsigned __int64,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (?pxmRequest@@YA_K_KV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 1>pxmCore.obj : error LNK2019: unresolved external symbol __imp_closesocket referenced in function "unsigned __int64 __cdecl pxmRequest(unsigned __int64,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (?pxmRequest@@YA_K_KV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 1>pxmCore.obj : error LNK2019: unresolved external symbol __imp_recv referenced in function "unsigned __int64 __cdecl pxmRequest(unsigned __int64,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (?pxmRequest@@YA_K_KV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 1>pxmCore.obj : error LNK2019: unresolved external symbol __imp_connect referenced in function "unsigned __int64 __cdecl pxmRequest(unsigned __int64,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (?pxmRequest@@YA_K_KV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 1>pxmCore.obj : error LNK2019: unresolved external symbol __imp_socket referenced in function "unsigned __int64 __cdecl pxmRequest(unsigned __int64,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (?pxmRequest@@YA_K_KV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 1>pxmCore.obj : error LNK2019: unresolved external symbol __imp_htons referenced in function "unsigned __int64 __cdecl pxmRequest(unsigned __int64,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (?pxmRequest@@YA_K_KV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 1>pxmCore.obj : error LNK2019: unresolved external symbol __imp_gethostbyaddr referenced in function "unsigned __int64 __cdecl pxmRequest(unsigned __int64,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (?pxmRequest@@YA_K_KV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 1>pxmCore.obj : error LNK2019: unresolved external symbol __imp_gethostbyname referenced in function "unsigned __int64 __cdecl pxmRequest(unsigned __int64,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (?pxmRequest@@YA_K_KV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 1>pxmCore.obj : error LNK2019: unresolved external symbol __imp_inet_addr referenced in function "unsigned __int64 __cdecl pxmRequest(unsigned __int64,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (?pxmRequest@@YA_K_KV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 1>pxmCore.obj : error LNK2019: unresolved external symbol __imp_WSAStartup referenced in function "unsigned __int64 __cdecl pxmRequest(unsigned __int64,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (?pxmRequest@@YA_K_KV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) 1>C:\Program Files\Autodesk\3ds Max 2010\plugins\pxmCore.gup : fatal error LNK1120: 11 unresolved externals 1>Das Buildprotokoll wurde unter "file://c:\Eigene Dateien\RnD\C#\pxmCore\pxmCoreMAX\x64\Debug\BuildLog.htm" gespeichert. 1>pxmCoreMAX - 12 Fehler, 1 Warnung(en) ========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========
-
Hallo,
siehe http://www.c-plusplus.net/forum/viewtopic-var-p-is-1789326.html#1789326
MfG,
Probe-Nutzer
-
SUPER!!! Hat funktioniert. Vielen herzlichen Dank!!!
-
Das Plugin konnte ich jetzt problemlos kompilieren, aber leider läufte es unter 3ds Max nicht. Er gibt mir jedes mal folgende Fehlermeldung aus "Error Loading DLL: DLL <C:\Program Files\Autodesk\3ds Max 2010\PlugIns\coreMax.gup> failed to initialize. error code 126 - The specified module could not be found."
In einem anderen Forum bin ich unter http://forum.3d-plugin.com/viewtopic.php?f=23&t=75 auf einen Beitrag zu einem ähnlichen Problem gestoßen. Daraufhin habe ich den Dependency Walker heruntergeladen und meine Datei überprüft.
Dabei habe ich einige DLLs gefunden, die nicht vorhanden sind. Habe soweit alle zusammen gesammelt. Es fehlt mir nun nur noch die MSJAVA.DLL, welche von der WS2_32.LIB benötigt wird!?!? Wo bekomme ich diese Datei her?
Vielen Dank für weitere Tipps!
-
Hast Du die C-Runtime installiert?
Oder besser noch *statisch gelinkt*?
http://blog.kalmbach-software.de/de/2008/03/05/wie-man-statisch-gegen-die-c-runtime-crt-linkt/
-
Nicht, dass ich mir dessen bewusst wäre. Habe Visual Studio 2008 mit dem aktuellen Windows SDK und dem Autodesk 3ds Max SDK installiert.
Werde es mir die nächsten Tage noch einmal genauer anschauen.
-
Mittlerweile habe ich Deinen Tipp befolgt und die Schritte in dem Beispielvideo abgearbeitet. Leider hat sich nichts geändert.
Nach wie vor fehlt die MSJAVA.DLL welche von der WS2_32.LIB benötigt wird. Nehme ich die WS2_32.LIB (für was ist die eigentlich?) dann bekomme ich wieder die alten Fehler.
Wobei ich hier (http://dependencywalker.com/faq.html) gelesen habe, dass diese Fehlermeldung ignoriert werden kann!?!
Vielen Dank für Eure Hilfe!
-
DaDiceman schrieb:
Wobei ich hier (http://dependencywalker.com/faq.html) gelesen habe, dass diese Fehlermeldung ignoriert werden kann!?!
Ja. Genau.
Vielleicht solltest Du mal in einem 3ds Max Forum fragen.... ich vermute mal fast, dass es was anderes ist... ist 3ds Max überhaupt 64-Bit?
-
Jupp, 3ds Max gibt es seit einigen Versionen in 64-bit.
Keine Ahnung wie, aber ich habe es nun zum Laufen bekommen.
Macht es einen Unterschied, ob ich etwas als "Release" oder "Debug" kompiliere?
Noch einmal herzlichen Dank für Eure Hilfe!
-
Ja klar... ausliefern darfst Du nur Release und wenn Du gegen die DLL version linkst, geht es auch nur mit Release, da es nur dafür die Redistributable gibt...
-
Äh.
Muss man Max-Plugins nicht sowieso mit genau der Studio-Version bauen, mit der auch das Max gebaut wurde? Also wenn mich meine Erinnerung nicht täuscht, ist das so.
-
Jupp, das stimmt. So braucht man für Autodesk 3ds Max 2010 auch Visual Studio 2008. Leider gibt es aber innerhalb des Projektes noch viele Einstellungsmöglichkeiten.
Die Referenzen von Autodesk zum Programm selbst und zum SDK sind immer sehr ausführlich und hilfreich. Leider finden sich aber zu den genauen Einstellungen in Visual Studio nur wenig bzw. fast keine Informationen.
Immerhin läuft das Plug-In, nicht zuletzt dank Eurer Hilfe, nun endlich.
-
Die genauen Einstellungen sind bei MSVC nicht so wichtig. Also die meisten sind egal, einige machen schon nen unterschied.
Ich würde sagen übernimm einfach die Defaults vom Visual Studio, und stell nur das um, was in der Autodesk Doku steht, dass man umstellen muss. Dann wird das schon passen...
Ahja, Optimierungen kann man die meisten ohne Probleme dazuschalten. Die Default-Calling-Convention darf man natürlich nicht ändern, aber so Sachen wie Inlining, Omit Frame-Pointer etc. sind problemlos. Und andere Dinge zu ändern zahlt sich normalerweise nicht aus.