Как я могу бросить динамическую зависимость от
libgmp
и перейти от этого:Статическая ссылка GMP к приложению Haskell с использованием GHC (+ LLVM)linux-vdso.so.1 => (0x00007fffdccb1000) libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007fb01afc1000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb01acc7000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb01aabe000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb01a8ba000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb01a69d000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb01a2df000) /lib64/ld-linux-x86-64.so.2 (0x00007fb01b249000)
к этому (в настоящее время по желанию):
linux-vdso.so.1 => (0x00007fffdccb1000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb01acc7000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb01aabe000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb01a8ba000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb01a69d000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb01a2df000) /lib64/ld-linux-x86-64.so.2 (0x00007fb01b249000)
в чистом и портативном режиме, который работает только во всех дистрибутивах GNU/Linux (и не вмешивается в BSD (включая OS X))?
Вы видите какие-либо другие зависимости, которые могут вызвать проблемы в текущем списке, как указано выше, при распространении одного бинарного набора Haskell с несколькими дистрибутивами GNU/Linux?
Примечания:
- мое приложение является GPLv3, так что никаких проблем нарушения лицензии не возникает в отношении GMP
- Указание пути к
libgmp.a
не работает (How to selectively link certain system libraries statically into Haskell program binary?),libgmp
еще перечисленные в выводеldd
.
Каков ваш процесс развертывания? В частности, что мешает вам развертывать libgmp вместе с вашим приложением? Что вы имеете в виду, не испортить BSD, включая OSX? Вы не можете запускать один и тот же двоичный файл как на OSX, так и на Linux. – asm
@AndrewMyers Я использую Cabal для сборки. Развернуть libgmp? Как? Я хочу поддерживать как минимум Windows, Linux, OS X и FreeBSD. Если мне нужно создать общую/динамическую библиотечную версию libgmp для каждой платформы, чтобы развернуть ее вместе с моим приложением, это слишком много. Не возиться: решение, которое работает предпочтительно не только на одной ОС; думал о том, что кто-то может предложить использовать что-то вроде 'locate libgmp' и использовать все, что он может вернуть во время ссылки, и' locate' вести себя по-разному на разных ОС. (Замените 'locate' каким-либо другим инструментом здесь, как вы пожелаете.) –
Похоже, вы говорите о развертывании двоичного файла, который вам придется создавать для каждой платформы. Так как вы должны построить его для каждой платформы, у вас должна быть версия libgmp для каждой платформы, так что вы можете просто упаковать ее с помощью своего двоичного файла. Мне что-то не хватает о том, как вы планируете распространять свое приложение? – asm