1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-07-25 10:35:14 +00:00
QB64 Phoenix Edition. QB64 is a modern extended BASIC programming language that retains QBasic/QuickBASIC 4.5 compatibility and compiles native binaries for Windows, Linux, and macOS. https://qb64phoenix.com
Go to file
Matthew Kilgore f7fabda198 Fix random seg faults on exit
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.
2022-11-29 20:04:54 -05:00
.ci Pin versions of build agents 2022-11-19 01:55:20 -05:00
.github/workflows Update webfactory/ssh-agent 2022-11-19 15:13:26 -05:00
docs Add libqb_http API for HTTP connections 2022-11-19 15:13:26 -05:00
internal Fix random seg faults on exit 2022-11-29 20:04:54 -05:00
licenses Add the libcurl license 2022-11-19 01:55:20 -05:00
source Merge branch 'main' into main 2022-11-27 14:50:00 -05:00
tests Install Xvfb on Linux build agent 2022-11-29 20:04:53 -05:00
.clang-format Run clang-format on ./internal/c/*cpp files 2022-05-06 13:20:30 -04:00
.gitignore Add a740g's miniaudio backend 2022-08-27 14:27:55 -04:00
COPYING.txt Fix up licensing details 2020-02-25 21:21:12 +11:00
Makefile Don't compile libqb.cpp as Objective-C on Mac OS 2022-11-29 20:04:54 -05:00
qb64pe.1 Add and fix options list in manpage 2022-10-01 20:19:01 -04:00
README.md Step 10: Update remaining stuff 2022-08-12 02:54:12 +02:00
SAMPLES.txt Update more links 2022-05-03 23:49:57 -04:00
setup_lnx.sh Install libcurl on Linux build agent 2022-11-19 01:55:20 -05:00
setup_mingw.cmd Update .ci/bootstrap.bat to use setup_mingw.cmd 2022-11-14 09:53:58 +05:30
setup_osx.command Fix setup_osx.command script when run from a different directory 2022-10-27 23:26:07 -04:00
setup_win.cmd Update .ci/bootstrap.bat to use setup_mingw.cmd 2022-11-14 09:53:58 +05:30

QB64 Phoenix Edition

QB64-PE

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

  1. Installation

    1. Windows
    2. macOS
    3. Linux
  2. Usage

  3. Additional Info

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