【问题标题】:SFML not linking statically to openal32 (links statically to all other dependencies)SFML 没有静态链接到 openal32(静态链接到所有其他依赖项)
【发布时间】:2015-07-20 22:15:15
【问题描述】:

我使用 CMake for MinGW 编译了 SFML。运行“mingw32-make install”后,所有内容都已构建并安装,没有错误。但是在运行示例时 - pong.exe、sound.exe、sound-capture.exe 和 voip.exe 都依赖于openal32.dll

我在配置 CMake 时指定了SFML_USE_STATIC_LIBS = true,示例可执行文件的所有其他依赖项仅在本机 Windows dll 上。

谁能解释为什么它动态链接到 openal32(但没有别的)?

编辑:我刚刚遇到了这个线程http://en.sfml-dev.org/forums/index.php?topic=262.0,它正在讨论完全相同的问题。我会认为(因为这是从 2008 年开始)现在已经实施了。还是还是一样?

编辑 2:http://en.sfml-dev.org/forums/index.php?topic=18119.0 此处的响应表明 OpenAL 由于许可证而必须动态链接。谁能确认许可证是否允许将 openal32.dll 与可执行文件一起分发?

【问题讨论】:

    标签: c++ cmake sfml


    【解决方案1】:

    我不是律师(昨晚我没有住在一家受欢迎的连锁酒店)。

    OpenAL implementation they are usingGNU Library General Public License (LGPL), version 2 下获得许可。 LGPL v2 要求:

    如果您将程序与库链接,则必须向接收者提供完整的目标文件,以便他们在对库进行更改并重新编译后可以将它们与库重新链接。您必须向他们展示这些条款,以便他们了解自己的权利。

    允许用户将闭源游戏与修改后的 OpenAL 库重新链接的最简单方法是使用openal32.dll 使该游戏动态链接。这样一来,他们就可以简单地将openal32.dll 替换为修改后的openal32.dll,并将其放在您的游戏可执行文件旁边。

    关于许可证的这一部分:

    您必须向他们展示这些条款,以便他们了解自己的权利。

    只需通知您的用户您的游戏使用 OpenAL,并以某种方式让他们访问 LGPL v2 文本的正文。

    您可以在以下条件下将openal32.dll 与您的游戏一起分发:

    例如,如果您分发图书馆的副本,是否免费 或收费,您必须给予收件人我们给予的所有权利 你。您必须确保他们也收到或可以获得源 代码。

    只需通知您的用户您的游戏使用 OpenAL,并提供他们可以下载源代码的链接即可满足这一要求。

    要告知您的用户他们对 OpenAL 的权利,您可以在游戏本身的“关于”页面中或在分发的游戏手册的前言/附录中进行。例如:

    本游戏使用以下开源软件:

    在您向用户宣传 OpenAL 的同时,您还可以自愿为您的游戏使用的其他开源库(例如 SFML)提供归属。

    【讨论】:

    • 太好了,谢谢!我对 LGPL 条款得出了类似的结论,但您的回答让我非常清楚。
    • 这是否意味着如果您要静态链接到根据 LGPL 许可的库,您必须使源代码生成的目标文件可用(但不是源代码本身),以便用户可以将它们与不同版本的静态库重新链接在一起吗?
    • 在 LGPL 许可证本身中直接这样说:如果您将程序与库链接,您必须向接收者提供完整的目标文件,以便他们可以在之后重新链接它们与库对库进行更改并重新编译。
    • 因此,对于闭源游戏,它可以是:(游戏对象文件 + 静态库)或(游戏可执行文件 + 动态库)。我没有任何统计数据,但我的印象是绝大多数人出于实际原因更喜欢后一种方法。
    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多