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