静态链接库

Linking libraries statically

我必须编写一个程序,之后应该 运行 在超级计算机上,所以我得到提示我应该 link 我的库静态。

问题是当我 link

g++ -o calcrank -llinbox -lgivaro -lgmp -lntl -static -static-libstdc++ -static-libgcc calcrank.cpp
/usr/bin/ld: cannot find -llinbox
/usr/bin/ld: cannot find -lgivaro
/usr/bin/ld: cannot find -lgmp
/usr/bin/ld: cannot find -lntl
collect2: error: ld returned 1 exit status

当然,我使用的所有库都只能作为 *.so 库使用,而不是静态 *.a 库。有没有方便的方法来转换 *.so 库或关于如何继续获得自包含的 运行ning 程序的任何建议?

据我所知,没有简单的方法。

"static linking" 共享库有一些工具:

  1. Statifier(开源)
  2. Ermine(闭源,付费)

你可能应该问问这个,也许你可以带上共享库并在运行你的程序之前设置环境变量LD_LIBRARY_PATH指向你的共享库目录。

据我所知,Statifier 对我不起作用。 Ermine unlicensed 可能会给出一些警告和 30 天的限制消息。因此,为了在没有管理员权限的 Linux 系统上分发我的东西,我将 all needed shared libraries 收集到一个子目录中,制作了一个脚本来设置 env 变量并启动我的可执行文件。并以 zip 的形式分发。