gpt4 book ai didi

c++ - g++:静态链接不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:37 32 4
gpt4 key购买 nike

我正在尝试静态链接我项目中的标准库。我在 SO 和其他站点 ( http://www.trilithium.com/johan/2005/06/static-libstdc/ ) 上尝试了来自不同线程的静态链接选项的几种变体,但没有一个产生预期的结果。

这是我当前的标志设置:

g++ -Wall -g -static-libgcc -static-libstdc++ -Iinclude -std=c++11

我也试过:

g++ -Wall -g -Wl,-Bstatic -lstdc++ -std=c++11

对于这些变体中的任何一个,ldd 的输出仍然是:

linux-gate.so.1 => (0xb77b1000)
libstdc++.so.6 => /lib/libstdc++.so.6 (0x4e085000)
libm.so.6 => /lib/libm.so.6 (0x4daf0000)
libgcc_s.so.1 -> /lib/libgcc_s.s0.1 (0x4dd1f000)
libc.so.6 => /lib/libc.so.6 (0x4d90a000)
/lib/ld-linux.so.2 (0x4d8e7000)

运行 file 还告诉我它是一个动态链接的二进制文件。我已经在多个发行版上尝试过此方法,包括 Fedora 18、Ubuntu 12.04 和 CentOS,但无济于事。

最佳答案

g++ -Wall -g -static-libgcc -static-libstdc++ -std=c++0x hello.cpp

使用 ldd 的输出

linux-vdso.so.1 =>  (0x00007fffef928000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbe12439000)
/lib64/ld-linux-x86-64.so.2 (0x00007fbe12822000)

在我的 Ubuntu 12.04 下工作,我也怀疑你使用的是 Ubuntu 12.04 支持的 gcc/g++ 版本,因为它是 g++ 4.6,而 g++ 4.6 不提供 -std=c++11 标志。

g++ -std=c++0x -static hello.cpp

这也像预期的那样将所有内容编译成一个静态对象。

我的hello.cpp

的来源
#include <iostream>

int main(int argc, char* argv[])
{
[](void){std::cout << "hello" << std::endl;}();
return(0);
}

我认为您正在使用不同的编译器或您的平台不支持的编译器,记录下您的编译器版本,这个标志有效,问题可能出在您的安装或编译器中的设置。

关于c++ - g++:静态链接不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15690214/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com