【问题标题】:What is the equivalent switch to /MT (VC++) for g++ in linux (CentOS)?linux (CentOS) 中 g++ 的 /MT (VC++) 等效开关是什么?
【发布时间】:2013-07-16 16:12:10
【问题描述】:

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

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

我只是不知道 linux 的等价物是什么?

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

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

【问题讨论】:

  • /MTd 指示链接器使用 多线程调试 运行时库 (see MSDN)。
  • @Casey 抱歉已修复,/MD :S
  • 那么有人知道将库依赖项链接到可执行文件的开关吗?
  • 英特尔故意不支持这种情况。你也不应该,当最终程序使用 两个 TBB 副本时,结果会非常很差。他们每个人都认为他们可以控制程序中的线程。
  • TBB 只是一个例子;o 并且可能是一个坏例子。 :$ 并且不知道,感谢您提供信息,将在此处链接投诉用户。

标签: c++ command-line g++ dependencies equivalent


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我的二进制文件不知何故要求系统上存在 TBB 库,这是我想要避免的
    • Intel grants to you a non-exclusive, non-assignable copyright license to distribute (except under an Evaluation License as specified below) the Redistributables, or any portions thereof, as part of the product or application you developed. - Link to Intel redistribute tbb libs and dlls 。在我看来,您可以使用您的解决方案重新分发适用于 Linux 平台的 TBB 库。
    • 很抱歉,没有可以静态链接的英特尔 TBB 库,并且无法在 Windows 上编译和静态链接 any C/C++ 库并让它在 Linux 上运行 - 所以你想做的事情无法完成。您需要做的是动态链接英特尔 TBB 库并让 Linux 用户下载英特尔 TBB 可再发行组件,这样他们就不必购买任何包含英特尔 TBB 的英特尔产品。
    • @IngeHenriksen 我想你还没有听说过cross compilers 的最新发明,它可以在一个平台上编译运行在不同平台上的软件,但我不认为这是真的很重要,因为 Gizmo 从未说过他想在 Windows 上编译和链接 Linux 版本。您似乎也不知道 TBB 是 dual licensed under both GPLv2 and a commercial license
    • @Casey 只要交叉编译器符合 ISO 标准,它就可以工作,但我对交叉编译器没有经验。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2021-08-07
    • 2013-01-07
    相关资源
    最近更新 更多