I'm trying to use Mongoose with PB. I'm trying to put it into a DLL/dylib/shared object, which works on Windows and macOS, but crashes on Linux. Has anyone had any experience with it and might know what I'm doing wrong on Linux?
PB file
Code: Select all
Global quit
Prototype.i pStartServer()
Prototype.i pUpdateServer()
Prototype.i pShutdownServer()
If OpenLibrary(0, "libmongoose.so")
StartServer.pStartServer = GetFunction(0, "StartServer")
UpdateServer.pUpdateServer = GetFunction(0, "UpdateServer")
ShutdownServer.pShutdownServer = GetFunction(0, "ShutdownServer")
If StartServer()
OpenWindow(0, 0, 0, 320, 240, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
AddWindowTimer(0, 0, 500)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Timer
UpdateServer()
Case #PB_Event_CloseWindow
quit = 1
EndSelect
Until quit
EndIf
EndIf
Code: Select all
// Adapted from https://github.com/cesanta/mongoose/blob/master/examples/desktop-server/main.c (Copyright (c) 2020 Cesanta Software Limited)
#include "main.h"
#include "mongoose/mongoose.h"
static const char* s_web_root_dir = ".";
static const char* s_listening_address = "http://0.0.0.0:8000";
struct mg_mgr mgr;
struct mg_connection* c;
static void cb(struct mg_connection* c, int ev, void* ev_data, void* fn_data) {
if (ev == MG_EV_HTTP_MSG) {
mg_http_serve_dir(c, ev_data, s_web_root_dir);
}
(void)fn_data;
}
int StartServer() {
mg_mgr_init(&mgr);
c = mg_http_listen(&mgr, s_listening_address, cb, &mgr);
if (c) {
return 1;
}
return 0;
}
void UpdateServer() {
mg_mgr_poll(&mgr, 1000);
}
void ShutdownServer() {
mg_mgr_free(&mgr);
}
Code: Select all
#ifndef libpbmongoose_h__
#define libpbmongoose_h__
extern int StartServer();
extern void UpdateServer();
extern void ShutdownServer();
#endif // libpbmongoose_h_