Hallo Axel,
das ist mit Mathematica 13.3 weiterhin so,
In[11]:= $Version
Out[11]= "13.3.0 for Microsoft Windows (64-bit) (June 3, 2023)"
man kann "Debug" -> True setzen
------------------------------------------------------------------------
In[9]:= Needs["CCompilerDriver`"];
In[12]:= CreateExecutable[{fnSource, lopassmainSrcFile}, "lowpass",
"TargetDirectory" -> targetDir,
"Libraries" -> "WolframRTL_Static_Minimal", "Debug" -> True]
During evaluation of In[12]:=
%LOCALAPPDATA%\Temp\m-c25e6f02-3ff2-4163-a31c-9bcc0c24f145\Working-tracy-12648-19300-2>call
"C:\Program Files\Microsoft Visual
Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
**********************************************************************
** Visual Studio 2022 Developer Command Prompt v17.6.5
** Copyright (c) 2022 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
Microsoft (R) C/C++-Optimierungscompiler Version 19.36.32537 fr x64
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.
lopass.c
lopassMain.c
%LOCALAPPDATA%\m-c25e6f02-3ff2-4163-a31c-9bcc0c24f145\lopassMain.c(2):
fatal error C1004: Unerwartetes Dateiende gefunden.
Code wird generiert...
During evaluation of In[12]:= CreateExecutable::cmperr: Compile error:
%LOCALAPPDATA%\Temp\m-c25e6f02-3ff2-4163-a31c-9bcc0c24f145\lopassMain.c(2):
fatal error C1004: Unerwartetes Dateiende gefunden.
Out[12]= $Failed
------------------------------------------------------------------------
wenn Sie die Dateien anschauen:
%LOCALAPPDATA%\Temp\m-c25e6f02-3ff2-4163-a31c-9bcc0c24f145>dir/O:D
Datenträger in Laufwerk C: ist Windows
Volumeseriennummer: 107F-5A4B
Verzeichnis von %LOCALAPPDATA%\Temp\m-c25e6f02-3ff2-4163-a31c-9bcc0c24f145
17.07.2023 09:50 2’310 lopass.c
17.07.2023 09:50 288 lopass.h
17.07.2023 09:52 13 lopassMain.c
17.07.2023 10:09 <DIR> .
17.07.2023 10:09 <DIR> Working-tracy-12648-19300-2
17.07.2023 10:11 <DIR> ..
3 Datei(en), 2’611 Bytes
3 Verzeichnis(se), 339’814’338’560 Bytes frei
------------------------------------------------------------------------
%LOCALAPPDATA%\Temp\m-c25e6f02-3ff2-4163-a31c-9bcc0c24f145>more/e
lopassMain.c
lopassmainSrc
%LOCALAPPDATA&\Temp\m-c25e6f02-3ff2-4163-a31c-9bcc0c24f145>
------------------------------------------------------------------------
dann ist die Datei lopassMain.c ist ein einziges Wort, daher
verunstaltet und ist seit Kernighan und Ritchie 1978 niemals
kompilierbar gewesen --- OMG --- das allerallerkleinste C-Programm ist
soetwas wie
int main( int argc, char* argv) { return 0;}
Die Verunstaltung kommt daher, dass das zitierte Beispiel eine
Auslassung beinhaltet, denn
------------------------------------------------------------------------
(* Write a C main function to call the generated code. *)
lopassmainSrcFile = FileNameJoin[{targetDir, "lopassMain.c"}];
Export[lopassmainSrcFile, lopassmainSrc, "Text"]
------------------------------------------------------------------------
die Datei lopassmainSrcFile existiert nicht in diesem Beispiel:
Copy/Paste - Fehler bei der Erstellung des Manual.
Im Fall muss diese Funktion selbst geschrieben werden und im erzeugten
Verzeichnis abgelegt werden.
Mit den besten Grüssen
Udo.
Am 12.07.2023 um 00:55 schrieb Axel Bauer via demug:
Hallo,
zunächst vielen Dank für die Aufnahme in die Liste!
Ich habe folgende Problemstellung:
unter
https://www.wolfram.com/mathematica/new-in-8/integrated-c-workflow/create-standalone-executables-using-compiled-funct.html
findet sich ein interessantes Beipiel für die Ausführung der
Mathematica-Funktion "CreateExecutable", in meinem Fall wird damit
eine Anbindung an das installierte und auch funktionierende Visual
Studio 2022 angezielt, um eine exe-Datei zu erstellen.
Leider funktioniert das bei mir aber nicht. Hier ein Auszug aus der
Internetseite:
(* Create Standalone Executables Using Compiled Functions
You can generate and distribute standalone executables. *)
lopass = Compile[{{x, _Real, 1}, dt, RC},
Module[{a = dt/(RC + dt), yprev = First[x], yi},
Table[yi = x[[i]] + (1 - a)*yprev;
yprev = yi;
yi, {i, 1, Length[x]}]]];
(* Generate C code and a header *)
targetDir = CreateDirectory[]
fnSource = FileNameJoin[{targetDir, "lopass.c"}];
Export[fnSource, lopass];
(* Write a C main function to call the generated code. *)
lopassmainSrcFile = FileNameJoin[{targetDir, "lopassMain.c"}];
Export[lopassmainSrcFile, lopassmainSrc, "Text"]
(* Compile it into an executable using the Wolfram Runtime
Library. *)
Needs["CCompilerDriver`"];
lopassExe =
CreateExecutable[{fnSource, lopassmainSrcFile}, "lowpass",
"TargetDirectory" -> targetDir,
"Libraries" -> "WolframRTL_Static_Minimal"]
$Failed
An dieser Stelle geht es bei mir also nicht mehr weiter.
"fatal error C1004: Unerwartetes Dateiende gefunden" wird in folgender
Internetseite kommentiert:
https://learn.microsoft.com/de-de/cpp/error-messages/compiler-errors-1/fatal-error-c1004?view=msvc-170
Doch da ich das obige Beispiel aus einer Internetseite übernommen
habe, die sicherlich eine korrekte Wiedergabe ist, sehe ich keine
anwendbare Hilfe in dieser learn.microsoft-Seite. Insgesamt kann ich
mir keinen Reim darauf machen, wo der Fehler liegen soll.
Übrigens habe ich das obige lopass versuchsweise reduziert auf das
einfache lopass = Compile[{{x, _Real,1}}, x];
Doch auch das führt zur gleichen Fehlermeldung.
Ich würde mich über jede Hilfestellung freuen, damit ich anhand des
obigen Beispiels mittels Mathematica eigene exe-Dateien dieses Typs
erstellen kann.
_______________________________________________
DMUG Deutschsprachiges Mathematica-Forum demug@XXXXXXX.ch
http://www.mathematica.ch/mailman/listinfo/demug
Archiv: http://www.mathematica.ch/archiv.html