I get this segfault: Verifying dependencies for libmtg@0.1.0 Compiling /home/runner/libmtg/tests/test1 (from package libmtg) using c backend [OK] can import {"Island": (name: "Island", text: "({T}: Add {U}.)", imageUrl: "https://cards.scryfall.io/normal/front/a/c/acd6be3f-745c-41ad-95c9-1db66ba56be2.jpg?1712356421", expansion: "Outlaws of Thunder Junction", rarity: "common", collectorNumber: 279, cost: @[], typeLine: (superType: {Basic}, mainType: {Land}, subType: {Island}), power: 0, toughness: 0, eventHandleName: "")} Lib unloaded Traceback (most recent call last) /home/runner/.choosenim/toolchains/nim-2.0.4/lib/pure/collections/tableimpl.nim(198) test1 SIGSEGV: Illegal storage access. (Attempt to read from nil?) Segmentation fault (core dumped) Error: execution of an external program failed: '/home/runner/libmtg/tests/test1' Tip: 5 messages have been suppressed, use --verbose to show them. tools.nim(36) doCmd Error: Execution failed with exit code 1 ... Command: /home/runner/libmtg/nimble-env/bin/nim c --noNimblePath -d:NimblePkgVersion=0.1.0 --hints:off --colors:off -r --path:. /home/runner/libmtg/tests/test1 Run
But the traceback makes no sense, as the echo was already successful. (`Traceback (most recent call last) /home/runner/.choosenim/toolchains/nim-2.0.4/lib/pure/collections/tableimpl.nim(198) test1`. Code after the echo statement also runs successfully, and I really can’t pinpoint the cause of this segfault. Code: import std/[dynlib, tables] test "can cards": type CardsProc = proc (): Table[string, CardObject] {.gcsafe, nimcall.} let lib = loadLib("tests/cardbank.so") assert lib != nil, "Error loading library" let cards = cast[CardsProc](lib.checkedSymAddr("load")) echo cards() unloadLib(lib) echo "Lib unloaded" # Segfault Run