Why doesn't cabal install use the flag --enable-shared by default? I've notice that trivial programs when compiled without this flag, get huge in file size. Is there a connection? Is this a design choice related to how Haskell programs are ment to be easily deployed in a single self-contained binary?
Haskell Static vs Dynamic Linking in Deployment
2k Views Asked by Nordlöw At
1
There are 1 best solutions below
Related Questions in DEPLOYMENT
- Github Pages Deployment deploys a blank page
- Django Admin Panel and Sub URLs Returning 404 Error on Deployment
- Next 14 App Router pages from dynamic routes not generating when deployed on vercel but only work on localhost
- Deployment through app engine, cloud sql database, problem connecting with server code, doesn't connect
- How to Deploy and Manage a Python Application with Systemd
- Elasticbeanstalk FastAPI application is intermittently not responding to https requests
- Duplicate GET requests - Rails & Heroku
- How to use a proxy to obtain a static IP for my Node.js application?
- Next js app throwing 404 error when deployed to vercel, even though it works fine on local
- How to deploy my shiny application (with multiple files) via Docker
- Deploying telegram bot
- How to deploy angular 17 SSR into IIS
- Route not working on refreshing the page in react deployed application
- Vercel wildcard route's src results in 404 error in Hapi.js backend
- Django deployment with GTK3
Related Questions in HASKELL
- Typeclass projections as inheritance
- How to generate all possible matrices given a number n in Haskell
- Is there a way to get `cabal` to detect changes to non-Haskell source files?
- How to have fixed options using Option.Applicative in haskell?
- How can I create a thread in Haskell that will restart if it gets killed due to any reason?
- Automatic Jacobian matrix in Haskell
- Haskell writing to named pipe unexpectedly fails with `openFile: does not exist (No such device or address)`
- Why does Enum require to implement toEnum and fromEnum, if that's not enough for types larger than Int?
- Non-exhaustive patterns in function compress
- How to get terms names of GADT in Template Haskell?
- Implementing eval() function with Happy parser generator
- How to count the occurences of every element in a list in Haskell fast?
- In Haskell, what does `Con Int` mean?
- Extract a Maybe from a heterogeneous collection
- Haskell, Stack, importing module shows error "Module not found"
Related Questions in DYNAMIC-LINKING
- Making binary depend on the correct `libpthread`
- Unable to load library from custom paths during compilation
- Segmentation fault while loading library with LD_LIBRARY_PATH
- Is mixing dynamic and shared libraries a good idea when creating an ODBC Driver?
- Executable searching for the linked library in different path than the one set using LD_LIBRARY_PATH
- Where is the order in which ELF relocations are applied specified?
- Cmake: Specify custom path to STL library (libstdc++)
- Visual Studio 2022 - how to link an .obj file residing somewhere else on the system?
- Unable to dynamically link on Alpine
- Statically include libc in c++ program with gcc without using -static option
- How to set BOOST_ALL_DYN_LINK for Cython build of my library interface on Windows 10
- What exactly is static variable behaviour in multiple linkeage of a library that contains it in C++?
- Using patchelf to change the SONAME of libGLdispatch.so breaks its functionality
- What is the linux command that gives the paths to libraries for linking during c++ compilation?
- build static curl executable from source
Related Questions in STATIC-LINKING
- Linking GLFW with a static library using Premake
- Conan: How to get the exact version of a statically linked library contained in a pre-built package?
- undefined reference to `__mingw_vsscanf' while trying to link GLFW statically on VScode
- How do I override location for dynamically linked libgcc_s?
- CMake: Selectively relinking function calls
- Is mixing dynamic and shared libraries a good idea when creating an ODBC Driver?
- Linker cannot find strnstr() on Ubuntu with libbsd
- Compiling libR (from the R statistical package) as a standalone C library for java+jni
- FTGL linking to Visual studio 2022 (x86) using VCPKG C++
- g++ - analogue to rust's build-std
- Statically compile gcrypt
- What exactly is static variable behaviour in multiple linkeage of a library that contains it in C++?
- LNK2019 error when trying to use Stanford external C++ libraries in Visual Studio
- Build Python as static library with won't include basic modules
- What is the linux command that gives the paths to libraries for linking during c++ compilation?
Related Questions in CODE-SIZE
- Why does GCC emit unnecessary dynamic initialization code for unused inline variables?
- Do compiler optimize memory usage of temporary variables used for better code readability?
- slimming unused std::stringstream locale/facets for embedded use?
- Does deleting/changing comments code solve "Code too large" compilation error in Java?
- finding total size of C files in gcc
- why is Separating my code into Static Library have much code size than within the main in C in terms of .bin or .out file or an executable?
- Assembly “Hello world” execution file less than 20 bytes
- Which GCC optimization flags affect binary size the most?
- How to compress or do size optimization for large static sparse array in C
- compress or size optimization for large sparse array in C
- Function sizes including static data in other sections
- Is there any way to shorten this machine code Hello World in AArch64 assembly?
- How to downsize code that uses DHT11 for AVR (Attiny45)
- How to remove useless empty space between ELF sections after removing section?
- How smart are C++ compilers about code size with template classes?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
I think it has to do with lack of support. However, I can't get a straight answer as to whether or not GHC currently supports dynamic linking. The GHC wiki page SharedLibraries/PlatformSupport is two years old.
On Windows, I tried building a whole bunch of packages with
--enable-shared, including a simple program I wrote that uses http-enumerator to download from a URL every 30 seconds. When I ran the program (after putting all the DLLs in a folder with my program), it segfaulted after a few seconds. When I compiled with--threaded, it segfaulted immediately.I tried this in GHC 7.0.3. A documentation page for that version says:
This notice does not appear in later versions.
By the way there's another hassle to static binaries besides code size. GHC uses GMP for its big integer support. GMP is licensed under the LGPL. This means that if you need to distribute a proprietary binary, or if you have a dependency that is not GPL-compatible (e.g. OpenSSL), you will need to distribute your object files to comply with GMP's license. Either that, or find a way to get libgmp to be dynamically linked. I would like to know how to do that.