Erstellt von Flo am 10. Januar 2010
Ich habe mir mit Rhodan zusammen überlegt, mal einen Erfahrungsbericht von mir zu veröffentlichen. Ich hoffe, dass euch diese neue Art von Beitrag interessiert.
Das Vorhaben
An einem kalten Sonntagabend beschloss ich den Support des UnrealIRCd Projekts zu testen. Das UnrealIRCd Projekt entwickelt seit vielen Jahren einen IRC Server, welcher auf einfache Benutzbarkeit optimiert wurde.
Obwohl die meisten Benutzer IRCD Server unter auf UNIX basierten Betriebssysteme betreiben, gibt es Ausnahmen, welche diese mit Betriebssystemen der Firma Microsoft betreiben wollen.
Nachdem ich von der Entwicklung der neuen UnrealIRCd Version erfahren habe, beschloss ich zum direkten Vergleich den UnrealIRCd Server in der Version 3.2.8.1 mit dem Microsoft C++ Compiler zu kompilieren.
Wie kompiliert man den UnrealIRCd mit dem Microsoft C++ Compiler
Hierzu öffnet man die Microsoft Visual Studio Konsole mit der Verknüpfung, welche unter “Start => Programme => Microsoft Visual Studio 2008 => Visual Studio Tools” zu finden ist und “Visual Studio 2008-Eingabeaufforderung” heisst.
Anschließend navigiert man in den “Haupt” Ordner des Quellcodes. In diesem befindet sich die Datei “makefile.win32”.
Nun startet man mit dem Befehl “nmake -f makefile.win32” den Kompilierungsprozess.
Hierbei tritt folgender Befehl auf:
wircd.def : error LNK2001: unresolved external symbol add_remote_include
wircd.def : error LNK2001: unresolved external symbol add_send_mode_param
wircd.def : error LNK2001: unresolved external symbol badwords_stats
wircd.def : error LNK2001: unresolved external symbol ban_version
wircd.def : error LNK2001: unresolved external symbol fast_badword_match
wircd.def : error LNK2001: unresolved external symbol fast_badword_replace
wircd.def : error LNK2001: unresolved external symbol find_loaded_remote_include
wircd.def : error LNK2001: unresolved external symbol find_remote_include
wircd.def : error LNK2001: unresolved external symbol m_names
wircd.def : error LNK2001: unresolved external symbol myargv
wircd.def : error LNK2001: unresolved external symbol mystpcpy
wircd.def : error LNK2001: unresolved external symbol our_strcasestr
wircd.def : error LNK2001: unresolved external symbol remote_include
wircd.def : error LNK2001: unresolved external symbol send_channel_modes
wircd.def : error LNK2001: unresolved external symbol send_channel_modes_sjoin
wircd.def : error LNK2001: unresolved external symbol send_channel_modes_sjoin3
wircd.def : error LNK2001: unresolved external symbol snprintf
wircd.def : error LNK2001: unresolved external symbol stripbadwords
wircd.def : error LNK2001: unresolved external symbol w_whois
wircd.def : error LNK2001: unresolved external symbol webtv_cmds
wircd.def : error LNK2001: unresolved external symbol webtv_parse
wircd.lib : fatal error LNK1120: 21 unresolved externals
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN
\link.EXE"' : return code '0x460'
Stop.
Der Support
Ich war der Meinung, dass dies ein Fehler der Entwickler war und begab mich in das offizielle Support IRC Netzwerk von UnrealIRCd, welches die Adresse “irc.UnrealIRCd.com” hat. Da ich der Meinung war, dass es kein “Benutzerfehler” war, begab ich mich in den Channel “#unreal-devel” um die Entwickler über diesen Fehler zu informieren.
Dort traf ich auf Stealth, welcher mich mit einem Channel Ban darauf hinwies, dass ich im falschen Channel bin und doch bitte die FAQ lesen solle.
Dort findet man unter dem Artikel “Compiling – Windows: unresolved external symbol ..” einen fehlerhaften Auszug aus dem Kompilierungsprozess, wessen Fehler aber nicht mit meinen übereinstimmt. Dort wurde mit einem fehlerhaften Link auf eine Anwendung “dlltool.exe” verwiesen. Nach erfolgreichem googlen fand ich dieses Programm unter der Adresse http://www.vulnscan.org/tmp/dlltool.exe.
In der FAQ stand folgende Instruktion:
nmake -f makefile.win32 [your other options here]
nmake -f makefile.win32 SYMBOLFILE
nmake -f makefile.win32 [your other options here]
So basically you just run nmake -f makefile.win32 SYMBOLFILE and then restart compiling again.
Auf Grund langjähriger Erfahrungen mit OpenSource Software war ich der Meinung, dass “SYMBOLFILE” ein Platzhalter sein müsse, welchen ich durch die fehlerhafte Objektdatei ersetzen muss. Allerdings bekam ich nur einen Hinweis, dass die Objektdatei existiert.
Als ich in “#UnrealIRCd” bezüglich diesen Fehlern nachfragte, wies mich der Benutzer “commx” darauf hin, dass ich doch bitte in “#UnrealIRCd-support” fragen möchte. Stealth bannte mich darauf hin auch im “#UnrealIRCd” Channel.
Direkt als ich den “#UnrealIRCd-support” Channel betrat, wurde ich schon wieder gebanned mit der Begründung, dass meine Anwesenheit nicht erwünscht ist und ich nicht in der Lage bin einfache Instruktionen durchzuführen.
Die Lösung
Nun habe ich aus purem Sarkasmus den Befehl so ausgeführt, wie er dort stand:
nmake -f makefile.win32 SYMBOLFILE
und es funktionierte.
Fazit
Die Freundlichkeit des Supports lässt zu wünschen übrig. Man hätte den Fehler suchen können anstatt den Benutzer aus diversen Channels zu bannen. Vielleicht war mein Problem auch nur der offizielle Grund. Ich habe den Nicknamen “irc1” verwendet, welcher nicht wirklich einfallsreich war.
Ein OpenSource Projekt sollte vor der STABLE Freigabe unter Windows kompiliert werden und auf eventuell auftretende Fehler untersucht werden. Hätte das UnrealIRCd Projekt dies getan, wäre mein Fehler nicht aufgetreten.