2013-07-17 120 views
2

我的用户抱怨说他们必须在他们不拥有的机器上安装linux线程构建块,并且许多主机不希望我的最终用户安装intel线程构建块,所以我想创建静态版本的我的动态库/插件/模块/扩展(无论是一个可插入的C++程序/ dll/so的更正术语)。我发现对于Windows,我必须使用/ MT(多线程)而不是默认/ MD开关(多线程DLL),所以我的程序将没有依赖关系(但是,Windows有一个并发容器库,所以我不需要在那里使用TBB)。在Linux(CentOS)中,g ++的等效切换到/ MT(VC++)是什么?

我只是不知道什么是相当于Linux是什么?

或者是否有可以找出所有选项的.sln到makefile转换器?

我在Windows上开发,但我的大多数最终用户使用Linux,所以我想确保他们没有任何负担,我希望他们能够使用我的开源版本非常舒适。

+0

/MTd指示链接器使用**多线程调试**运行时库([见MSDN](http://msdn.microsoft.com/en-us/library/2kzt1wy3(v = vs 0.71)的.aspx))。 – Casey

+0

@Casey对不起,/ MD:S – Gizmo

+0

所以没有人知道切换链接库的依赖关系到可执行文件? – Gizmo

回答

1

Microsoft C++编译器中的/MT标志会导致链接器与静态版本的C和C++运行时库链接。 Microsoft提供运行时库的静态和动态版本,因此该选项可以有效地选择要链接的哪一组库。此标志不影响与第三方库的链接。

在Linux方面,你有-static选项告诉链接器使用静态库。这个选项不像Windows那样是特定于库的,它会影响所有库。但是,如果使用此选项,则必须提供所需的所有库的静态版本,链接器不会自动转换动态库。这包括系统和运行时库,它们并不总是以静态库的形式提供。它还包括英特尔TBB,如果英特尔不以此形式提供,那么您可能需要将自己编译为静态库。

0

我猜你的意思是你的用户必须在他们的Linux机器上安装英特尔线程构建模块(TBB)。如果您使用的是英特尔TBB功能,并且您的客户必须编译您的源代码,那么他们需要安装英特尔TBB。另一种方法是为您的客户编译源代码,并仅向您提供解决方案二进制文件而不是源代码 - 然后他们不必安装TBB。

+0

我的二进制文件需要TBB库存在系统中,这是我想要避免 – Gizmo

+0

'英特尔授予您一个非排他性的,不可转让的版权许可证(除下面指定的评估许可证外)作为您开发的产品或应用程序的一部分。“ - [链接至英特尔重新分发tbb库和dll](http://software.intel.com/zh-cn/tags/21728)。由此看来,您可以使用您的解决方案为Linux平台重新分配TBB库。 – 2013-07-18 02:17:57

+0

我的意思是我希望它们与我的图书馆静态链接.. – Gizmo

相关问题