【问题标题】:Statically link cilk library on Mac with gcc使用 gcc 静态链接 Mac 上的 cilk 库
【发布时间】:2013-08-16 09:00:45
【问题描述】:

我正在尝试将 cilk 库静态链接到我的程序,以便能够在没有安装 cilk 库的环境中运行可执行文件(因为它并不常见)。

这是我能想到的最好的:

cilkc -Ofast -Wextra -pedantic -fwhole-program -flto -msse4.2 -m64 -lm -mtune=generic -funroll-loops -finline-functions -ffast-math -lpthread -lz -DUSE_GCC -Wc,-std=c99 -Wc,-pipe -DUSE_FILE32API /usr/local/lib/libcilk.a /usr/local/lib/cilk/libcilkrt0.a src/all.c src/CilkSearch.cilk

如上所述,我手动链接 libcilk.a 和 libcilkrt0.a 以防止 gcc 链接到共享库。这使得程序大小从 266Kb 增加到 344Kb,这让我觉得静态链接成功了。

不过,遗憾的是,当我使用 otool 检查可执行文件的依赖项时,我得到:

bin/hayabusa:
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/usr/local/lib/libcilk.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
/opt/local/lib/gcc47/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)

我了解 zlib 和 gcc,我还没有静态链接。 但是,如果我手动链接到 libcilk.a,为什么 libcilk.0.dylib 依赖项仍然存在?

我实际上也尝试在另一台计算机上运行该程序,但在启动时程序终止并抱怨 /usr/local/lib/libcilk.0.dylib 无法加载。

所以我的问题是,明确指定 .a 到 gcc 不足以删除指定的库依赖项?我还应该怎么做才能让我的 libcilk 静态链接而不是在运行时加载?

我已经知道 -static 选项,但我不希望每个库(包括系统库)都被静态链接,我只希望 cilk 库被静态链接。
这可能吗?

【问题讨论】:

    标签: c macos gcc static-linking cilk


    【解决方案1】:

    我们明确不支持将 Cilk 运行时链接为静态库。原因的解释在我们的常见问题解答中http://www.cilkplus.org/faq/there-version-intel-cilk-plus-provides-statically-linked-libraries。我知道您正在构建一个应用程序,而不是一个库。但是,如果您将您的应用程序与也使用 Cilk Plus 的其他库链接,则可能会导致线程组合爆炸,从而损害性能。

    这并不是说它不能完成。但是,如果您遇到任何问题,必须使用动态链接的运行时重现它们,然后我们才会考虑它们。

    - Barry Tannenbaum
      Intel Cilk Plus Runtime Developer
    

    【讨论】:

    • 实际上,我正在使用 cilk 库(不是英特尔的 cilk-plus,GPL 库),它似乎提供 libcilk.a 和 libcilkrt0.a 作为链接的静态库,是否相同还是有问题?我只是想知道,为了能够运行使用 cilk 构建的程序,用户应该拥有什么样的环境?我应该将动态库与应用程序一起提供吗?
    • 编辑:我说的是 GPL,实际上可能不是,我的意思是 MIT 的:supertech.csail.mit.edu/cilk
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    相关资源
    最近更新 更多