gpt4 book ai didi

c - 在 Mac 上使用 gcc 静态链接 cilk 库

转载 作者:行者123 更新时间:2023-11-30 17:48:54 24 4
gpt4 key购买 nike

我正在尝试将 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 库静态链接。
这可能吗?

最佳答案

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

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

- Barry Tannenbaum
Intel Cilk Plus Runtime Developer

关于c - 在 Mac 上使用 gcc 静态链接 cilk 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18231223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com