我使用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吗?
答案 0 :(得分:3)
我不是律师(昨晚我没有留在一家受欢迎的连锁酒店。)
OpenAL implementation they are using已根据GNU Library General Public License (LGPL), version 2获得许可。 LGPL v2要求:
如果将程序与库链接,则必须向收件人提供完整的目标文件,以便在对库进行更改并重新编译之后,可以将它们与库重新链接。你必须向他们展示这些条款,以便他们知道自己的权利。
允许用户使用修改后的OpenAL库重新链接闭源游戏的最简单方法是使该游戏链接动态与openal32.dll
。这样,他们可以简单地将openal32.dll
替换为修改过的openal32.dll
,并将其放在游戏可执行文件旁边。
关于这部分许可证:
你必须向他们展示这些条款,以便他们了解自己的权利。
只需告知您的用户您的游戏使用OpenAL,并以某种方式让他们访问LGPL v2文本的正文。
您可以在以下条件下将游戏Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim lr1 As Long, lr2 As Long
Dim Delta As Variant'****************EDIT************
Dim wks1 As Worksheet, wks2 As Worksheet
Dim rINT As Range
Set rINT = Intersect(Target, Range("N:N"))
If rINT Is Nothing Then Exit Sub
Set wks1 = ActiveSheet
Set wks2 = Worksheets("Charges") 'change to suit
lr1 = wks1.Cells(Rows.Count, "N").End(xlUp).Row
For i = 2 To lr1
Delta = wks1.Cells(i, "N").Value
If Delta > 0.9 Then
lr2 = wks2.Cells(Rows.Count, "A").End(xlUp).Row + 1
wks1.Cells(i, "N").EntireRow.Copy Destination:=wks2.Cells(lr2, "A")
End If
Next i
MsgBox "Macro is Done, Thank you for waiting", vbInformation
End Sub
分发:
例如,如果您分发库的副本,是否免费 或者收费,您必须给予收件人我们给予的所有权利 您。您必须确保他们也接收或可以获得来源 代码。
只需告知您的用户您的游戏使用OpenAL,并提供指向他们可以下载源代码的位置的链接即可满足。
要告知您的用户他们对OpenAL的权利,您可以在"关于"游戏中的页面,或分布式游戏手册的前言/附录。例如:
此游戏使用以下开源软件:
- OpenAL Soft:http://openal-soft.org/
当您通知OpenAL用户时,您也可以自愿将其归因于您的游戏使用的其他开源库,例如SFML。