Re: dllexport and inline methods

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Apr 7, 2013 at 10:27 PM, Geoff Worboys
<geoff@xxxxxxxxxxxxxxxxxxxxxxx> wrote:
> I wrote:
> [...]
>>     class __declspec(dllexport) A {
>>     public:
>>         int fa() { return m; }
>>         int ga();
>>     private:
>>         int m{0};
>>     };
>
>>     class __declspec(dllexport) B {
>>     public:
>>         int fb();
>>         int gb();
>>     private:
>>         int m{0};
>>     };
>>     inline int B::fb() { return m; }
>>
>>     class C {
>>     public:
>>         int fc() { return m; }
>>         __declspec(dllexport) int gc();
>>     private:
>>         int m{0};
>>     };
> [...]
>> Notice that inline methods for class A and class B are NOT
>> being inlined inside the library (and the compiler does tell us
>> why in the case of B::fb()).
> [...]
>
> For those of us that would like to be able to build optimised
> shared libraries under Windows, without having to rewrite all
> code to look like class C above, I think I have found a work-
> around.
>
> An off-list reply to my query suggested I play with .def files.
> I had previously discarded using def files as being too hard
> with C++.  But it turns out not to be so hard.
>
> First step:
>
>   Stop using dllexport and dllimport with mingw/gcc.  Leave
>   your macros in place so they will work with msvc builds, but
>   under gcc set to them to blank.
>
>   Add this to your linker commands: -Wl,--export-all-symbols
>   (the -Wl, prefix needed if passing through gcc/g++)
>
>   Make sure your build produces its own def file:
>     -Wl,--output-def=mylib.def
>
> ...
> QUESTION: Does anyone know of any down-side to using
> --export-all-symbols other than the increase in interface
> size (and resulting startup impact)?
I believe there are two. First is violation of the One Definition
Rule. Destructors could run twice on the same object and cause a crash
(if the linker combines symbols). Second is an increased export symbol
table size.

Jeff




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux