静态链接库

Linking libraries statically

本文关键字:链接 静态      更新时间:2023-10-16

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

问题是当我链接

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

当然,我使用的所有库都只有*可用。所以用库代替static *。一个库。是否有一种方便的方法来转换*。所以库或任何建议如何继续获得一个独立的运行程序?

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

有一些用于"静态链接"共享库的工具:

  1. Statifier(开源)
  2. 银鼠(闭源、付费)

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

据我所知,Statifier对我不起作用。无执照的貂可能会给出一些警告和30天的限制信息。因此,为了在没有管理员权限的情况下跨Linux系统分发我的东西,我将所有需要的共享库收集到一个子目录中,编写了一个脚本来设置env变量并启动我的可执行文件。并以zip形式分发。