/
githubmirror
/
julia
Обзор
Документация
Войти
/
githubmirror
/
julia
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
cli/loader.h
85 строк
3 KB
Cody Tapscott
Avoid using `fork()` when probing system `libstdc++` (#60254)
03 дек 2025, 17:00
Не верифицирован
03 дек 2025, 17:00
ac4ee59
Код
Авторство
О чём код?
// This file is a part of Julia. License is MIT: https://julialang.org/license /* Bring in definitions for `_OS_X_`, `JL_PATH_MAX` and `PATHSEPSTRING`, `jl_ptls_t`, etc... */ #include "../src/support/platform.h" #include "../src/support/dirpath.h" #include "../src/julia_fasttls.h" #ifdef _OS_WINDOWS_ #define WIN32_LEAN_AND_MEAN #include <windows.h> #else #ifdef _OS_DARWIN_ #include <mach-o/dyld.h> #endif #ifdef _OS_FREEBSD_ #include <stddef.h> #include <sys/sysctl.h> #endif #define _GNU_SOURCE // Need this for `dladdr()` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <libgen.h> #include <unistd.h> #include <dlfcn.h> #include <signal.h> #endif #include <stdint.h> // Borrow definition from `support/dtypes.h` #ifdef _OS_WINDOWS_ # ifdef JL_LIBRARY_EXPORTS # define JL_DLLEXPORT __declspec(dllexport) __attribute__ ((visibility("default"))) # endif # define JL_DLLIMPORT __declspec(dllimport) __attribute__ ((visibility("default"))) #define JL_HIDDEN #else # define JL_DLLIMPORT __attribute__ ((visibility("default"))) #define JL_HIDDEN __attribute__ ((visibility("hidden"))) #endif #ifndef JL_DLLEXPORT # define JL_DLLEXPORT JL_DLLIMPORT #endif /* * DEP_LIBS is our list of dependent libraries that must be loaded before `libjulia`. * Note that order matters, as each entry will be opened in-order. We define here a * dummy value just so this file compiles on its own, and also so that developers can * see what this value should look like. Note that the last entry must always be * `libjulia`, and that all paths should be relative to this loader library path. */ #if !defined(DEP_LIBS) #define DEP_LIBS "../lib/example.so:../lib/libjulia.so" #endif // We need to dlopen() ourselves in order to introspect the libdir. #if defined(JL_DEBUG_BUILD) #define LIBJULIA_NAME "libjulia-debug" #else #define LIBJULIA_NAME "libjulia" #endif // Declarations from `loader_lib.c` and `loader_win_utils.c` JL_DLLEXPORT extern int jl_load_repl(int, char **); JL_DLLEXPORT void jl_loader_print_stderr(const char * msg); void jl_loader_print_stderr3(const char * msg1, const char * msg2, const char * msg3); void *jl_loader_open_via_mmap(const char *filepath, size_t *size); static void * lookup_symbol(const void * lib_handle, const char * symbol_name); const char *jl_loader_probe_system_library(const char *libname, const char *symbol); int jl_loader_locate_symbol(const char *library, const char *symbol); #ifdef _OS_WINDOWS_ LPWSTR *CommandLineToArgv(LPWSTR lpCmdLine, int *pNumArgs); char *wchar_to_utf8(const wchar_t * wstr); wchar_t *utf8_to_wchar(const char * str); void setup_stdio(void); #endif #include "../src/jloptions.h"