在Linux上构建不依赖任何共享库的可执行文件
环境:Ubuntu 14.04。通用条款4.8.2 我正在研究一个C++控制台应用程序。在可执行文件上运行“ldd”时,我看到以下内容:在Linux上构建不依赖任何共享库的可执行文件,linux,gcc,Linux,Gcc,环境:Ubuntu 14.04。通用条款4.8.2 我正在研究一个C++控制台应用程序。在可执行文件上运行“ldd”时,我看到以下内容: linux-vdso.so.1 => (0x00007fffe495e000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9ffa754000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x000
linux-vdso.so.1 => (0x00007fffe495e000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9ffa754000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9ffa38e000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9ffa087000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9ffaa6e000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9ff9e71000
我想知道是否可以在gcc/linker上定义标志,以便最终的可执行文件不依赖于任何共享库。只需在链接时添加
-static
:)
不仅出于安全原因,还应避免静态链接
顺便说一句:我知道没有办法从动态库创建静态库。因此,如果您只有共享库,则无法链接静态库。只需在链接时添加
-static
:)
不仅出于安全原因,还应避免静态链接
顺便说一句:我知道没有办法从动态库创建静态库。因此,如果您只有共享库,则无法链接静态库。只需在链接时添加
-static
:)
不仅出于安全原因,还应避免静态链接
顺便说一句:我知道没有办法从动态库创建静态库。因此,如果您只有共享库,则无法链接静态库。只需在链接时添加
-static
:)
不仅出于安全原因,还应避免静态链接
顺便说一句:我知道没有办法从动态库创建静态库。因此,如果您只有共享库,就不能链接静态库。这难道不要求静态构建的库可用吗?这需要在链接期间在生成计算机上有适当的库,但在执行时没有其他库。这有一些缺点。应用程序使用-实际上,网络应用程序-应该更好地动态链接。看看OP是否特别喜欢冒险,他是否可以建立自己的静态库;)不过,这也需要一个很好的理由。谢谢你们的回复。当硬盘或操作系统变得不稳定时,需要运行此可执行文件。我们的目标是它不依赖于任何共享库。这难道不要求静态构建的库可用吗?这需要在链接期间在构建机器上有适当的lib,但在执行时没有其他lib。这有一些缺点。应用程序使用-实际上,网络应用程序-应该更好地动态链接。看看OP是否特别喜欢冒险,他是否可以建立自己的静态库;)不过,这也需要一个很好的理由。谢谢你们的回复。当硬盘或操作系统变得不稳定时,需要运行此可执行文件。我们的目标是它不依赖于任何共享库。这难道不要求静态构建的库可用吗?这需要在链接期间在构建机器上有适当的lib,但在执行时没有其他lib。这有一些缺点。应用程序使用-实际上,网络应用程序-应该更好地动态链接。看看OP是否特别喜欢冒险,他是否可以建立自己的静态库;)不过,这也需要一个很好的理由。谢谢你们的回复。当硬盘或操作系统变得不稳定时,需要运行此可执行文件。我们的目标是它不依赖于任何共享库。这难道不要求静态构建的库可用吗?这需要在链接期间在构建机器上有适当的lib,但在执行时没有其他lib。这有一些缺点。应用程序使用-实际上,网络应用程序-应该更好地动态链接。看看OP是否特别喜欢冒险,他是否可以建立自己的静态库;)不过,这也需要一个很好的理由。谢谢你们的回复。当硬盘或操作系统变得不稳定时,需要运行此可执行文件。我们的目标是它不依赖于任何共享库。