env GB_JIT_ENABLED=0 myAppDir/myAppName
Dit kan je in de link op de desktop als commando zetten om bestaande apps nog/toch te doen werken na bv een update van Gambas die het bovenstaande probleem geeft.
(gelezen op GambasOne)
env GB_JIT_ENABLED=0 myAppDir/myAppName
Dit kan je in de link op de desktop als commando zetten om bestaande apps nog/toch te doen werken na bv een update van Gambas die het bovenstaande probleem geeft.
(gelezen op GambasOne)
Om een gambas programma te starten van de CLI en ineens ook een parameter mee te geven kan je de klassieke command line arguments gebruiken.
Die vraag je in gambas op met args (https://gambaswiki.org/wiki/comp/gb/args?nh)
Voorbeeld project code:
Public Sub Main()
'
Print Application.title & " (" & Application.Name & " " & Application.Version & ")"
Try Print "Given parameter (argument):" & Args.All[Args.Max]
'
End
Op de command line opgeroepen met een argument:
./TestCLIargument.gambas TEST
Test CLI argument (TestCLIargument 0.0.1) Given parameter (argument):TEST
Op de command line aangeroepen zonder argumenten:
./TestCLIargument.gambas
Test CLI argument (TestCLIargument 0.0.1) Given parameter (argument):./TestCLIargument.gambas
Als je geen parameter meegeeft, is er toch een standaard parameter 0, nl de naam van het aangeroepen programma zelf.
Eindelijk weer eens een werkende combinatie gevonden bij het nieuw installeren van een pc. Voor Leap 16.x is momenteel (nog) geen officiële versie verkrijgbaar, maar nu is er dus wel deze combinatie voor Tumbleweed die werkt.
Andere verkrijgbare versies voor Tumbleweed waren op dit moment: 3.20.4, 3.21.6 en 3.22.99 (van master).
Om het NoSSL probleem op te vangen wordt DataContext uitgebreid met:
Public Sub checkMariaDbSkipSSL() as IntegerBij het starten van gambas uit het menu duikt alleen een venster op:
[Ok]
This application has raised an unexpected error and must abort
Unable to find method Application_Log in class Project. Symbol not found.[gb.jit].CCompilation.Wait.247
Ook op de commandolijn kan je wel de versie van gambas opvragen met gambas3 –version, maar niet de IDE starten met gambas3 (zie onderaan).
Op de commandolijn kan je starten met een environment variabele om JIT uit te schakelen:
env GB_NO_JIT=true gambas3
Dan start de IDE wel op (zonder de JIT compiler (?).
Ps: de reaktie bij gewone start van de commandline:
gambas3
MESA: warning: Driver does not support the 0x7d67 PCI ID.
MESA: warning: Driver does not support the 0x7d67 PCI ID.
MESA: error: ZINK: vkEnumeratePhysicalDevices failed (VK_ERROR_INITIALIZATION_FAILED)
MESA: error: ZINK: failed to choose pdev
glx: failed to create drisw screen
failed to load driver: zink
gb.jit: error: unable to compile JIT pointers of 'gb.form.terminal':
| gcc: error: unrecognized command line option ‘-std=gnu17’; did you mean ‘-std=gnu11’?
|
**
** OOPS! INTERNAL ERROR. Program aborting, sorry! :-(
** Unable to compile JIT source file
**
** gbr3: error: [gb.jit].CCompilation.Wait.247: Unable to find method Application_Log in class Project. Symbol
not found
**
** Please send a bug report to the gambas bugtracker [1] or to the gambas mailing-list [2].
** [1] https://gambaswiki.org/bugtracker
** [2] https://lists.gambas-basic.org/#user
**
Een variabele declareren kan in een module of form code bv zo:
Public iSomeNumber As Integer
Private iSomeOther As Integer
Private sSomeName As String
OF binnen een procedure/functie zo:
Public sub myProcedure
Dim iSomeNumber
...
End
Vrijgeven
Je hebt hier in al die jaren nog niet gelezen hoe een variabele terug vrijgegeven wordt.
Dat komt omdat je dat normaal niet zelf doet, er is een soort automatische “huisvuilophaling” voor de variabelen, nl als het bereik of de “scope” verdwijnt.
Hierboven dus aan het einde van de procedure myProcedure, of aan het einde van de module of form waar de public/private gedeclareerd werden.
Maar het kan wel expliciet: met NULL:
iSomeNumber = Null
sSomeName = Null
Het doet niet veel, zelfs nadien kan je sSomeName nog aanroepen, die zal alleen leeg zijn, niet ongeldig.
Pointers
Bij pointers bestaat er wel een Free, maar pointers gebruik je normaal alleen als interface met externe c libraries, zie https://gambaswiki.org/wiki/howto/extern
Een onverwachte crash in een programma dat al draaide op Gambas en elders geïnstalleerd werd:
Type mismatch: wanted Integer, got Float instead
De foutmelding leidde naar een regel met een Spinbox:
DateAdd(dRunner, gb.Minute, SpinBoxTimeSlice.Value)
Ik heb de waarde van een SpinBox altijd als een geheel getal gebruikt, en dat werkte ook altijd zo. Maar uit de foutmelding leid ik nu af dat de spinboxwaarde een Float geeft ipv vroeger een integer. Als ik de waarde omzet naar integer werkt het terug.
DateAdd(dRunner, gb.Minute, CInt(SpinBoxTimeSlice.Value))
Is er iets veranderd aan SpinBox in Gambas 3.21 ? Ja, veel !
De gevolgen: meestal geen…
Date(Year(now()), Month(now()), SpinBoxDay.Value) worden de parameters omgezet naar int, dus geen probleem.Select SpinBoxDay.Value ook geen probleem.Op 25/03/2026 schreef Benoît Minisini dat het opgelost was in “de laatste commit”, dus ik vermoed dat het vanaf 3.21.6 ongeveer zal aangepast zijn (voor DateAdd).
Maar er blijven nog wel andere problemen, want de SpinBox.Value waarde wordt ook elders gebruikt, en die is duidelijk veranderd van Integer naar Float. Dat kan je zien aan de nieuwe eigenschap “precision” die plots opduikt, en die toelaat om de spinbox met komma’s te laten werken.
Voorbeeld waarbij die onverwacht programma’ kunnen breken:
print 60 Div SpinBoxTimeSlice.Value
print i Mod SpinBoxTimeSlice.Value
Spijtig genoeg weer niet verkrijgbaar: gambas3.x op OpenSUSE Leap 16.0. Niet aanwezig in de repos. Nb: Ik heb Gambas 3.20.99 al draaien op een OpenSUSE Leap 16.0 die geupgrade is van 15.6 of zo, en waarin Gambas geïnstalleerd was.
Compile from source beschrijving ondertussen ook niet meer bijgewerkt om te kloppen met 16.0. Installatie met zypper in van automake en libtool gaan nog wel.
Foutmelding op:
‘alure-devel’ is niet aangetroffen in pakketnamen - de eigenschappen worden nu geprobeerd.
Geen enkel item biedt ‘alure-devel’ aan.
‘gstreamermm-devel’ is niet aangetroffen in pakketnamen - de eigenschappen worden nu geprobeerd.
Geen enkel item biedt ‘gstreamermm-devel’ aan.
Eens proberen zonder die twee?
zypper install -y libtool gawk gcc glew-devel gmime-devel gtk2-devel gtk3-devel libqt5-qtx11extras-devel libqt5-qtwebengine-devel libQt5Xml-devel libQt5Sql-devel libqt5-qtsvg-devel libQt5Gui-devel libQt5Core-devel libQt5Sql5-postgresql libQt5Sql5-unixODBC libQt5Sql5-mysql libQt5Sql5-sqlite libICE-devel libSM-devel unixODBC-devel libzip-devel libzstd-devel libmariadb-devel gsl-devel libopenssl-devel postgresql-devel libcurl-devel SDL2_ttf-devel SDL2_mixer-devel SDL2_image-devel libxslt-devel libv4l-devel librsvg-devel gtkglext-devel libgnome-keyring-devel libjpeg62-devel libpoppler-devel libpoppler-glib-devel imlib2-devel gmp-devel qt6-webenginewidgets-devel qt6-svg-devel qt6-gui-devel qt6-core-devel qt6-openglwidgets-devel
En ook apart staande webkitgtk3 moeten we overslaan:
zypper install -y webkitgtk3-devel
‘webkitgtk3-devel’ is niet aangetroffen in pakketnamen - de eigenschappen worden nu geprobeerd.
Geen enkel item biedt ‘webkitgtk3-devel’ aan.
En na ./reconf-all en ./configure -C -q krijgen we :
|| THESE COMPONENTS ARE DISABLED:
|| - gb.db.sqlite2
|| - gb.db.sqlite3
|| - gb.db2.sqlite3
|| - gb.gtk3.webview
|| - gb.media
|| - gb.mongodb
|| - gb.openal
|| - gb.qt4
|| - gb.qt4.ext
|| - gb.qt4.opengl
|| - gb.qt4.webkit
|| - gb.qt4.webview
|| - gb.qt5.webkit
|| - gb.sdl
|| - gb.sdl.sound
make -j $(nproc)
.. is gebeurd, dan als root sudo make install…
compiling ...
installing ...
compiling 'gb.media.form' component...
gbc3: error: Component information file not found: gb.media
make[2]: *** [Makefile:684: install-exec-local] Fout 1
make[1]: *** [Makefile:567: install-am] Fout 2
make: *** [Makefile:464: install-recursive] Fout 1
Er zijn wel onderdelen van gambas aanwezig in het systeem, maar niet de IDE:
gbr3 naam.gambasMisschien is er nog een andere mogelijkheid; ik heb een download:
gambas3-ide-3.22.0+20260714+1-42.1.noarch.rpm (RPM-pakket, 2,4 MiB)
Vroeger kon je die openen in Yast, maar nu yast verdwenen is … misschien met “Ontdekken” (Discover). Daarbij wordt het (gebruikers-) wachtwoord gevraagd. Er komt een foutmelding ivm afhankelijkheden die niet opgelost kunnen worden. Andere versies proberen, bv?
Experiment met listboxen voor log en foutberichten op scherm en Ik kan de logberichten daarin zetten met lsbx.Add(s, 0) .
Maar ik wil het op een minder storende manier:
| Form content here.. …. …. Expander with lsbx’s starts under here : | Note: expanded = lsbx’s visible |
| lsbxLog: – log line 0 – log line 1 .. | lsbxEr: – err line 0 – err line 1 … |
Zet de instellingen van de form objecten:
We willen het verloop van de berichten zo:
Om hetzelfde te kunnen doen op al onze forms zetten we de code in MMain:
Public Const csHide As String = "h"
Public Const csShow As String = "s"
Public Const csUnchanged As String = "u"
Public iMaxLsbxLen As Integer = 100
Public Sub addToListbox(lsbx As ListBox, s As String, iSize As Integer, sHideShowUnchanged As String, bCompress As Boolean)
Dim myExpanderParent As Expander
lsbx.Tooltip = s
If lsbx.Tag = "" Then
lsbx.Tag = 0
Endif
' add to list if needed
If bCompress And lsbx.Count > 0 Then
' show repeated item with added string and keep in mind when comparing again..
If (lsbx[0].Text = s) Or (lsbx[0].Text = s & " (++)") Then
If lsbx[0].Text = s
lsbx[0].Text &= " (++)" ' show it is repeated several times
Endif
lsbx.Tag = lsbx.Tag + 1 ' last consecutive count
Else
lsbx.Add(s, 0)
lsbx.Tag = 1
Endif
lsbx.Tooltip &= " (R:" & lsbx.Tag & ")"
Else
lsbx.Add(s, 0)
Endif
' add size
lsbx.Tooltip &= "; Size:" & lsbx.Count
' adjust parent to make message visible even with closed expander
myExpanderParent = lsbx.Parent
Try myExpanderParent.Text = s
Try myExpanderParent.Tooltip = lsbx.Name
If Error Then
Message.Error(Error.Text)
Endif
' keep within limits
If lsbx.Count > IIf(isize, iSize, iMaxLsbxLen) Then
Try lsbx.Remove(IIf(isize, iSize, iMaxLsbxLen))
If Error Then
Print "Could not trim " & lsbx.Name & ": " & Error.Text
Endif
Endif
' does this trigger the parent to expand to make change visible?
Select sHideShowUnchanged
Case "h"
Try myExpanderParent.Hidden = True ' assume parent is Expander
Case "s"
Try myExpanderParent.Hidden = False ' assume parent is Expander
Case Else ' incl empty
' leave unchanged
End Select
If Error Then
Message.Error(Error.Text)
Endif
End
Uitbreidingen of aanpassen bv:
Algemene uitleg over gambas, momenteel in versie 3.x: (zie ook Wat is Gambas)
Gambas3 IDE
Dat is de programmeeromgeving om Gambas programma’s te maken. Als je zelf programma’s wil maken moet je opletten dat je de gambas “IDE” mee installeert!
Project
Een nieuw project maakt een directory aan met daarin alles wat met het project te maken heeft:
Er zijn veel voorbeeldprogramma’s beschikbaar die je kan openen in de IDE om te kijken hoe Gambas werkt, als broncode-archief of via git.
Broncode-archief
De Gambas IDE maakt het gemakkelijk om de broncode van je project klaar te zetten voor transport: met een export functie maak je een standaard Linux .tag.gz bestand.
Als je zo’n .tar.gz bestand krijgt of download, kan je het uitpakken met tar -xzvf naam.tar.gz, en dan maakt dat de projectdirectory, zodat je het project kan openen in de IDE.
CLI
Je kan niet alleen een desktop programma maken, maar ook CLI-programma, zonder een desktop scherm. CLI-programma’s zijn zoals (shell-) scripts, je start ze op de commandolijn, of je kan ze laten lopen uit een timer (cronjobs, ..).
Programma draaien (“run”)
Als je het programma draait vanuit de programmeeromgeving kan je het stap voor stap laten lopen tot gemarkeerde punten in je code, om te onderzoeken wat er juist gebeurt met variabelen enz.
Executable
Als je het programma uitvoerbaar wil maken, als afgewerkt programma dat zelfstandig(*) kan draaien, als “executable”, dan compileer je het tot een .gambas, en je kan automatisch een link (met icoon) laten maken op je desktop als je die optie aanvinkt. Daarop klikken start dan het programma, zonder de programmeeromgeving mee te starten. Dat is dus de versie die de “gebruikers” zullen krijgen. Ze hoeven niet het hele project met de broncode en de hele programmeeromgeving te hebben.
Runtime
sudo apt install gambas3-runtime
Processen
Gambas programma’s zijn als proces herkenbaar aan hun namen gb..; bv Gambas3 gestart, en daarin een project open en laten lopen;
In Taakbeheer zie je:
…
gbx3
…
gbr3
…
Een project gecompileerd en gestart bv met link op de desktop;
In Taakbeheer zie je:
…
gbr3
…
Schema
Dit overzicht/schema (over gambas2) is nog grotendeels geldig:



Links
Terugblik naar Gambas3 in 2019
http://gambas.copyleft.be/blog/archives/2144
Library of Component in Gambas3
http://gambas.copyleft.be/blog/archives/1861
Gambas3 app uitpakken en compileren
http://gambas.copyleft.be/blog/archives/1842