Fairly straightfowrad, programs were randomly seg faulting on exit. This was happening due to GLUT registering a cleanup function via atexit(), which then gets called when exit() is called. The issue happens when exit() is called on a thread other than the GLUT thread, which leads to the exit() call then attempting to cleanup GLUT while the other thread is still using it, which randomly leads to seg faults. Fixing this is slightly annoying. We cannot stop the GLUT thread, as the basic GLUT API (which is used on Mac OS) simply does not offer a way to exit the glutMainLoop() call. Thus the simplest solution is to simply make sure we call exit() on the GLUT thread, which we can fairly easily due via the message queue. That being the case, a new libqb_exit() API was added, which simply regsiters the GLUT exit message and then waits for the program to end. The atexit() handler then runs on the GLUT thread and everything works out fine. In the future we probably should redo the exit logic a bit so that all the threads are actually stopped/joined to ensure the exit process is consistent, however this is good enough for now. Also, there's plenty of error states which call exit() which I did not address. |
||
---|---|---|
.ci | ||
.github/workflows | ||
docs | ||
internal | ||
licenses | ||
source | ||
tests | ||
.clang-format | ||
.gitignore | ||
COPYING.txt | ||
Makefile | ||
qb64pe.1 | ||
README.md | ||
SAMPLES.txt | ||
setup_lnx.sh | ||
setup_mingw.cmd | ||
setup_osx.command | ||
setup_win.cmd |
QB64 Phoenix Edition
QB64 is a modern extended BASIC+OpenGL language that retains QB4.5/QBasic compatibility and compiles native binaries for Windows (Vista and up), Linux and macOS.
Table of Contents
Installation
Download the appropriate package for your operating system over at https://github.com/QB64-Phoenix-Edition/QB64pe/releases/latest
Windows
Make sure to extract the package contents to a folder with full write permissions (failing to do so may result in IDE or compilation errors).
- It is advisable to to whitelist the 'qb64pe' folder in your antivirus/antimalware software *
macOS
Before using QB64-PE make sure to install the Xcode command line tools with:
xcode-select --install
Run ./setup_osx.command
to compile QB64-PE for your OS version.
Linux
Compile QB64-PE with ./setup_lnx.sh
.
Dependencies should be automatically installed. Required packages include OpenGL, ALSA and the GNU C++ Compiler.
Usage
Run the qb64pe
executable to launch the IDE, which you can use to edit your .BAS files. From there, hit F5 to compile and run your code.
To generate a binary without running it, hit F11.
Additionally, if you do not wish to use the integrated IDE and to only compile your program, you can use the following command-line calls:
qb64pe -c yourfile.bas
qb64pe -c yourfile.bas -o outputname.exe
Replacing -c
with -x
will compile without opening a separate compiler window.
Additional Information
More about QB64-PE at our wiki: https://qb64phoenix.com/qb64wiki
We have a community forum at: https://qb64phoenix.com/forum
We don't currently tweet. Sorry.
Find us on Discord: https://discord.gg/D2M7hepTSx