Nun würde ich das Programm gern über eine kleine Webseite steuern und die Ausgabe möglichst live darstellen.
Heißt mein C Programm soll wenn es läuft einen Port öffnen und ich möchte mit einem Webbrowser darauf zugreifen.
Mit Arduino gibt es unzählige Beispiele wie ein http Zugriff auf ein esp Chips zu realisieren ist.
Ich dachte cool das bekommste ja leicht selbst hin. Aber ich scheitere seit Tagen daran nur das kleinste Beispiel zum laufen zu bekommen.
Z.b. habe ich unter Linux libmicrohttpd (https://www.gnu.org/software/libmicrohttpd/ )installiert und probiere nun das mini Beispiel von der Webseite aus.
Nur bricht es mir egal was ich ausbprobiere immer mit einer Fehlermeldungen ab.
Beim Kompilieren der Beispieldatei bekomme ich z.b. diese Fehlermeldung:
Code: Alles auswählen
/usr/bin/ld: /tmp/ccNZeGxU.o: in function `ahc_echo':
http-server.c:(.text+0xb2): undefined reference to `MHD_create_response_from_buffer'
/usr/bin/ld: http-server.c:(.text+0xcb): undefined reference to `MHD_queue_response'
/usr/bin/ld: http-server.c:(.text+0xda): undefined reference to `MHD_destroy_response'
/usr/bin/ld: /tmp/ccNZeGxU.o: in function `main':
http-server.c:(.text+0x15f): undefined reference to `MHD_start_daemon'
/usr/bin/ld: http-server.c:(.text+0x190): undefined reference to `MHD_stop_daemon'
collect2: error: ld returned 1 exit status
Code: Alles auswählen
#include "microhttpd.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define PAGE "<html><head><title>libmicrohttpd demo</title>"\
"</head><body>libmicrohttpd demo</body></html>"
static enum MHD_Result
ahc_echo(void * cls,
struct MHD_Connection * connection,
const char * url,
const char * method,
const char * version,
const char * upload_data,
size_t * upload_data_size,
void ** ptr) {
static int dummy;
const char * page = cls;
struct MHD_Response * response;
int ret;
if (0 != strcmp(method, "GET"))
return MHD_NO; /* unexpected method */
if (&dummy != *ptr)
{
/* The first time only the headers are valid,
do not respond in the first round... */
*ptr = &dummy;
return MHD_YES;
}
if (0 != *upload_data_size)
return MHD_NO; /* upload data in a GET!? */
*ptr = NULL; /* clear context pointer */
response = MHD_create_response_from_buffer (strlen(page),
(void*) page,
MHD_RESPMEM_PERSISTENT);
ret = MHD_queue_response(connection,
MHD_HTTP_OK,
response);
MHD_destroy_response(response);
return ret;
}
int main(int argc,
char ** argv) {
struct MHD_Daemon * d;
if (argc != 2) {
printf("%s PORT\n",
argv[0]);
return 1;
}
d = MHD_start_daemon(MHD_USE_THREAD_PER_CONNECTION,
atoi(argv[1]),
NULL,
NULL,
&ahc_echo,
PAGE,
MHD_OPTION_END);
if (d == NULL)
return 1;
(void) getc (stdin);
MHD_stop_daemon(d);
return 0;
}
Ich bin auch nicht verpicht darauf libmicrohttpd zu nutzen.
Wenn jemand eine andere Lösung dafür hat, nehme ich das auch gern.
Mir ist nur wichtig das die Webseite direkt auf dem Programm selbst erzeugt wird und ich kein Apache Server installieren muss.