我用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?
答案 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)