Re: Symbols and C++ inline constructor
On Sun, Jan 08, 2012 at 10:26:42AM +0100, Tobias Frost wrote:
> Just a general remark just came into my mind about the symbols
> dicssusion:
>
> Is is really *safe* to use inline methods as API in libraries?
Just trying to test this with the following code:
#include <string>
class test
{
public:
inline
test():
v()
{
}
inline
test(std::string const& var):
v(var)
{
}
inline
~test()
{
}
private:
std::string v;
};
static test t;
static test t2("foo");
Compiling, linking and testing with
g++ -fPIC -finline -c -o test.o test.cc
g++ -shared -o test.so test.o
nm -C -D test.so
Oddly, the constructors are only used if I actually make use of them.
i.e. delete the "static test ..." at the end and compare. If they
are used, I do see a non-inlined function appear though, albeit a
"W" (weak) symbol whether or not I explictly have the "inline"
keyword in the sources. Possibly my example is too simple. I'm
most surprised about the functions only being compiled on use even
without the inline. Maybe I need to take them out of the class
definition and inline the separate functions.
So not all bad--if you use an inlined function you do appear to get
a symbol emitted.
Regards,
Roger
--
.''`. Roger Leigh
: :' : Debian GNU/Linux http://people.debian.org/~rleigh/
`. `' Printing on GNU/Linux? http://gutenprint.sourceforge.net/
`- GPG Public Key: 0x25BFB848 Please GPG sign your mail.
Reply to: