通过C ++访问MySQL

时间:2010-09-28 23:50:35

标签: c++ mysql licensing

我想通过一个C ++程序在我的MySQL服务器上运行查询,该程序将免费向公众发布,但不是根据GPL或任何其他开源许可证发布的。

我的第一个问题是我是否可以在我的应用程序中使用MySQL Connector / C ++库。

如果没有,那么我可以使用哪些替代方案?

4 个答案:

答案 0 :(得分:7)

不幸的是,MySQL已经将客户端库许可从LGPL更改为GPL,这意味着任何与这些库静态或动态链接的应用程序都将成为衍生作品。因此,除非您为此购买许可证,否则不能在非FOSS应用程序中使用MySQL客户端库(用于访问MySQL服务器)。这里的FOSS代表Free&开源。可以找到Oracle所有者here认可的FOSS许可证列表{。{3}}。

但是,您可以使用ODBC访问MySQL而无需分发任何MySQL库等,因此客户端对此负责,并且必须决定是使用开源还是商业MySQL许可,这不会强制您购买根据Oracle认可的FOSS许可证授予或分发您的软件。请阅读this article了解详情。

关于GPL的另一个有趣的部分是它声明链接到GPL库的应用程序是衍生作品。这意味着如果你要创建一个链接到MySQL客户端库并与MySQL服务器通信的简约开源应用程序,定义一个API接口并动态加载你的商业/闭源库,它只导出那个定义的API实现,你不会违反许可条款和条件,因为在这种情况下,开源应用程序将是闭源产品的用户。商业图形驱动程序(如NVidia)和音频编解码器(如MP3)使用相同的方法。

答案 1 :(得分:1)

答案 2 :(得分:0)

最安全的选择可能是像Vlad建议的那样使用ODBC连接器,但这实际上只是将许可问题压缩到了您的客户/用户(即:由他们来验证各种用法是否正确许可证)。在概念上,对于具有任何许可的应用程序来说,使用在GPL下获得许可的ODBC驱动程序可能没什么问题,只要它不是静态链接的(即,它是基于连接字符串动态加载的),但有人可能会争辩说然后,用户违反了GPL,导致应用程序违反GPL组件的使用许可证使用GPL组件(因为该应用程序在GPL下也不可用)。它可能会变得混乱,而且通常不是法律明确的:您可能是安全的,但您的用户可能违反了任何实际使用场景。

我的建议是避免任何GPL,因为你没有将它用于你自己的应用程序(以及你正在使用的其他所有东西),你可以避免它;有很多人可以避免像瘟疫这样的GPL软件。如果您在Windows上编写,只需将SQL Server Express与常规MDAC连接器一起使用:它们都是免费的,随时可用的,高性能的,并且对您的代码没有特别的限制或权限管理(与GPL库不同)。对于Linux,我不知道,但我确信还有其他选择。

答案 3 :(得分:-2)

好的,您可以使用:http://forge.mysql.com/wiki/Connector_C%2B%2B

但公平警告:糟透了。刚读完MySQL连接器论坛,这个连接器的糟糕程度非常有趣。

或者你可以使用它:http://tangentsoft.net/mysql++/

它好多了,但仍然很糟糕。

我对MySQL和C ++的个人经历一直是个噩梦。我目前正在用Java重写一个调度服务器,因为我无法处理内存泄漏,malloc崩溃,段错误等等。我本来可以使用C路由并只使用C连接器(这是非常稳定的,我听说,但我不是用面向对象的语言编写必须使用C库的东西。

就许可证而言,你运气不好。如果使用MySQL连接器(C或C ++),您必须获得销售商业应用程序的许可。

然而,您可以使用MIT(或等效的)ODBC API(我认为)应该允许您发布/销售具有MySQL功能的商业和闭源软件(通过驱动程序,而不是本机)。