[cfe-dev] linking and stripping compared to GCC 4.4
Luc Bourhis
luc_j_bourhis at mac.com
Sat Nov 27 08:05:35 PST 2010
Hi,
consider the following Boost.Python code:
// demo.cpp
#include <boost/python.hpp>
template <typename T, typename U>
T foo(T i, U j) { return i*j; }
#define ARGS , (arg("i")=0, arg("j")=0)
BOOST_PYTHON_MODULE(demo_ext)
{
using namespace boost::python;
def("fii", foo<int,int> ARGS);
def("fil", foo<int,long> ARGS);
def("fif", foo<int,float> ARGS);
def("fid", foo<int,double> ARGS);
def("fic", foo<int,char> ARGS);
def("fli", foo<long,int> ARGS);
def("fll", foo<long,long> ARGS);
def("flf", foo<long,float> ARGS);
def("fld", foo<long,double> ARGS);
def("flc", foo<long,char> ARGS);
def("ffi", foo<float,int> ARGS);
def("ffl", foo<float,long> ARGS);
def("fff", foo<float,float> ARGS);
def("ffd", foo<float,double> ARGS);
def("ffc", foo<float,char> ARGS);
def("fdi", foo<double,int> ARGS);
def("fdl", foo<double,long> ARGS);
def("fdf", foo<double,float> ARGS);
def("fdd", foo<double,double> ARGS);
def("fdc", foo<double,char> ARGS);
}
Then compare
~> g++ -c -DBOOST_PYTHON_MAX_BASES=2 -fPIC -fno-strict-aliasing -DNDEBUG -march=native -O3 -DBOOST_ALL_NO_LIB -DBOOST_DISABLE_THREADS -I../cctbx/boost -I/usr/include/python2.6 demo.cpp
~> g++ -o demo.so -shared demo.o -L../cctbx/cctbx_build/lib -lboost_python~>> g++ -o demo_strip.so -s -shared demo.o -L../cctbx/cctbx_build/lib -lboost_python
~> ls -lhS
total 540K
-rw-r--r-- 1 luc devcom 240K Nov 27 07:50 demo.o
-rwxr-xr-x 1 luc devcom 170K Nov 27 07:50 demo.so*
-rwxr-xr-x 1 luc devcom 121K Nov 27 07:50 demo_strip.so*
-rw-r--r-- 1 luc devcom 902 Nov 27 07:18 demo.cpp
~> g++ --version
g++ (GCC) 4.4.4 20100630 (Red Hat 4.4.4-10)
to
~> clang++ -c -DBOOST_PYTHON_MAX_BASES=2 -fPIC -fno-strict-aliasing -DNDEBUG -O3 -DBOOST_ALL_NO_LIB -DBOOST_DISABLE_THREADS -I/Users/luc/Developer/cctbx/boost -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 demo.cpp
~> clang++ -o demo.so -w -bundle -undefined dynamic_lookup demo.o -L$cctbx_build_clang_pch/lib -lboost_python
~> clang++ -o demo_strip.so -s -w -bundle -undefined dynamic_lookup demo.o -L$cctbx_build_clang_pch/lib -lboost_python
~> ls -lhS
total 1184
-rwxr-xr-x 1 luc luc 203K Nov 27 16:56 demo.so
-rwxr-xr-x 1 luc luc 202K Nov 27 16:56 demo_strip.so
-rw------- 1 luc luc 178K Nov 27 16:56 demo.o
-rw-r--r--@ 1 luc luc 952B Nov 27 05:13 demo.cpp
~> > clang++ --version
clang version 2.9 (trunk 116866)
Target: x86_64-apple-darwin10
Thread model: posix
First demo.so is significantly smaller than demo.o with gcc 4.4 whereas this is the other way around with clang. Moreover the stripping -s option significantly reduce the size of the .so further whereas clang -s does not do so.
Is there any way to make clang++ competitive with GCC 4.4 here?
Thanks for any insight,
Luc Bourhis
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20101127/be173e14/attachment.html>
More information about the cfe-dev
mailing list