我正在开发一个针对Windows和Linux的音频库。对于Windows后端,我支持DirectSound、WASAPI和ASIO,而对于Linux、JACK和PulseAudio。最近出现了关于c/c++运行时(msvcrt/libc/libgcc/libstdc++)的静态链接与共享/动态链接以及其他依赖关系的主题,因为它是独立于自包含和库版本独立的。我决定将所有东西(DirectSound、WASAPI、ASIO和msvcrt)静态链接到Windows,因为DirectSound和WASAPI是内置的,所以我从源代码编译ASIO。但是对于Linux来说,事情似乎要复杂一些。这里:https://insanecoding.blogspot.com/2012/07/creating-portable-linux-binaries.html建议我通过静态链接libgcc和libstdc++是相当安全的,而不是libc本身(如果我错了请纠正我)。但我完全不知道如何处理libasound、libpulse和libjack-jackd2 2。APT包似乎只提供..so,不提供.a。
因此,我的问题基本上归结为这样一个问题:如何在linux上生成共享库(.so),使用所有libc、libgcc、libstdc++、libasound、libjack和libpulse,同时尽可能自我包含,要求终端用户尽可能少地安装,并在尽可能广泛的linux发行版上运行(对其他*NIXes不感兴趣)。
如果有什么不同的话,主要的目标(目前)是围绕这个本机二进制文件发布包装库,无论是在.NET on nuget.org上还是在Maven central上。我只是希望这个包的消费者能够说出"packagereference include=audiolib“,然后使用它,然后能够在广泛的平台上运行。
非常感谢来自ALSA/Pulse/JACK团队的人能对此有所了解,因为至少有一些关于静态连接GCC运行时的材料,但是在特定的音频库中几乎什么也没有。
https://stackoverflow.com/questions/66017579
复制相似问题