Montag, 13. April 2009

C/C++ Referenz

Ich muss mal gerade diesen Link festhalten:
http://www.cplusplus.com/reference/
Eine sehr gute und ausführliche Referenz der C/C++-Bibliotheken, erspart wildes Googeln.

LabVIEW und DLLs: Debuggen vereinfachen

Irgendwie sehr simpel, aber man muss erstmal drauf kommen. Beim Debuggen von DLLs mit LabVIEW hab ich immer das Problem gehabt, dass es enorm aufwändig war DLL-interne Variablen zum Fehlersuchen nach Außen durchzuschleusen. (Entweder man hat schon passende Übergabe-Variablen oder man muss sich passende nur fürs Debuggen anlegen, was dann dazuführt, dass man ständig den Funktionskopf erneuern muss.) Wenn man jetzt aber einfach in der DLL zur Laufzeit eine Datei öffnet und in diese mittels fprinft die Variablen reinschreibt, ersparrt man sich ne ganze Menge Arbeit und kann gleichzeitig alle möglichen Variablen dort reinschreiben.

Ich weiß es gibt diese tollen Debugger, allerdings hab ich mich noch nie damit beschäftigt. Und mit LabVIEW bringt einem das ja erstmal auch gar nix, man müsste ja noch eine C-Programm drumherum stricken... Ist allerdings auf meiner Muss-ich-irgendwann-mal-tun-Liste

CUDA, mingw und Code::Blocks

So um es mal festzuhalten:
man kann bisher mit CUDA unter Windows nur mit Hilfe des MSVC-Code erzeugen, was ich sehr schade finde. (Zumindest hab ich keinen nachvollziehbaren Weg gefunden mingw einzusetzen.)

Man kann aber trotzdem bspw. Code::Blocks verwenden, dazu sollte man sich an diesem Blog-Post orientieren. Allerdings muss man noch ein paar Anpassungen vornehmen, weil der Beitrag für eine Toolchain unter Linux ausgelegt ist. Die notwendigen Details poste ich hier, wenn es bei mir 100 % läuft (was es im Labor irgendwie schon tut, aber hier zuhause gerade noch nicht).

Ich werde es jetzt so machen, dass ich die Cuda-Funktionen in eine DLL packe, die ich mit MSVC erzeuge und den Rest dann mit mingw erzeuge und dann von dort auf die DLLs linke.

Microsoft Visual C++ (Express Edition) vs. C99

Jetzt bin ich schon zum zweiten mal auf das Problem gestoßen, dass der MSVC einfach mache Sachen des C99 Standards nicht unterstützt:
Heute war es die Funktion strtof, mit der kann man normalerweise einen String in einen Float wandeln. Zum Glück wird strtod (wandelt in double) unterstützt, so dass man mit nem Cast doch noch daran kommt.
Das erste Mal fiel es mir bei isfinite auf, das gibt's nämlich auch nicht.

Die Bibliotheken von mingw (und damit gcc) enthalten übrigens beides.