我怎么能静态编译libstdc ++ 11?

时间:2015-09-18 17:41:33

标签: c++ linux c++11 g++

我用here进行静态编译,工作正常 g++ -static-libgcc -L. -o example example.cpp
但我想通过-std=c++11标志静态编译 这是我的命令:
g++ -Wall -c -O2 -std=c++11 -fpic -o main.o main.cpp工作正常 但静态不行!
我怎么能静态地stdlibc ++ 11?

1 个答案:

答案 0 :(得分:1)

使用-static-libstdc++标志。

% cat hello.cc 

#include <iostream>
int main() {
  std::cout << "hello world" << std::endl;
  return 0;
}

编译:

%  g++ -static-libgcc -static-libstdc++ hello.cc -o hello
% ldd hello
  linux-vdso.so.1 (0x00007ffdf5f45000)
  libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6ee0f39000)
  libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6ee0b90000)
  /lib64/ld-linux-x86-64.so.2 (0x0000563c2b55d000)   

如果没有-static-*标志,那就会给出

linux-vdso.so.1 (0x00007ffcf2d37000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9c32ba4000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9c328a3000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9c3268c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9c322e3000)
/lib64/ld-linux-x86-64.so.2 (0x000056212766a000)