静态链接库

时间:2016-11-07 15:55:25

标签: c++ linker static-libraries

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

问题在于我链接

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库或有关如何继续获得自动运行程序的任何建议?

1 个答案:

答案 0 :(得分:2)

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

“静态链接”共享库有一些工具:

  1. Statifier(开源)
  2. Ermine(闭源,付费)
  3. 你应该问一下这个问题,也许你可以带来共享库,并在运行程序之前将环境变量LD_LIBRARY_PATH设置为指向脚本中的共享库目录。

    据我所知,Statifier并不适合我。 Ermine未经许可可能提供一些警告和30天的限制信息。因此,为了在没有管理员权限的Linux系统中分发我的东西,我将all needed shared libraries收集到一个子目录中,制作了一个脚本来设置env变量并启动我的可执行文件。并将其全部分发为拉链。