2

我的用户抱怨他们必须在他们不拥有的机器上安装 linux 线程构建块,并且许多主机不希望我的最终用户安装英特尔线程构建块,所以我想创建我的动态的静态版本库/插件/模块/扩展(无论正确的术语是用于可插入的 C++ 程序/dll/so)。

我发现对于 Windows,我必须使用 /MT(多线程)而不是默认的 /MD 开关(多线程DLL),所以我的程序将没有依赖项(但是,Windows 有一个并发容器库,所以我没有需要在那里使用TBB)。

我只是无法弄清楚linux的等价物是什么?

或者是否有一个 .sln to makefile 转换器可以找出所有选项?

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

4

2 回答 2

1

Microsoft C++ 编译器中的/MT标志使链接器链接到 C 和 C++ 运行时库的静态版本。Microsoft 发布了运行时库的静态和动态版本,因此此选项有效地选择要链接的库集。此标志不影响与第三方库的链接。

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

于 2013-07-31T01:30:30.123 回答
0

我猜你的意思是你的用户必须在他们的 Linux 机器上安装Intel Threading Building Blocks (TBB)。如果您使用英特尔 TBB 功能并且您的客户必须编译您的源代码,那么他们需要安装英特尔 TBB。另一种方法是为您的客户编译源代码,并且只向他们提供您的解决方案二进制文件而不是源代码 - 这样他们就不必安装 TBB。

于 2013-07-17T23:27:33.397 回答