From a9af8b093d20d1828bf560acdb7d809169c60464 Mon Sep 17 00:00:00 2001 From: Tetralux Date: Wed, 24 Feb 2021 02:17:08 +0000 Subject: [PATCH] Fix -build-mode:shared on Darwin Apparently, the '__$startup_runtime' symbol to initialize RTTI stuff has three underscores (not two) on Darwin! --- src/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 92e0b4104..8b83c1d35 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2394,7 +2394,8 @@ int main(int arg_count, char const **arg_ptr) { // so use ld instead. // :UseLDForShared linker = "ld"; - link_settings = gb_string_appendc(link_settings, "-init '__$startup_runtime' "); + // NOTE(tetra, 2021-02-24): On Darwin, the symbol has _3_ underscores; on Linux, it only has 2. + link_settings = gb_string_append_fmt(link_settings, "-init '%s$startup_runtime' ", build_context.metrics.os == TargetOs_darwin ? "___" : "__"); // Shared libraries are .dylib on MacOS and .so on Linux. #if defined(GB_SYSTEM_OSX) output_ext = STR_LIT(".dylib");