https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80469

            Bug ID: 80469
           Summary: Undefined symbol for abstract class impl with
                    -fvisibility=hidden
           Product: gcc
           Version: 5.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: theubik at mail dot ru
  Target Milestone: ---

Created attachment 41231
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41231&action=edit
example

When building with gcc 5.4 two libs (used option -fvisibility=hidden), first
has undefined symbol. With gcc 4.9 (4.9.3) not reproduced.

>> # uname -a
>> Linux vbox-ubuntu16 4.4.0-72-generic #93-Ubuntu SMP Fri Mar 31 14:07:41 UTC 
>> 2017 x86_64 x86_64 x86_64 GNU/Linux

>> #gcc --version
>> gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

Example:
// main.cpp
#include "subimpl.h"

class XXX
{
  IA* p;
public:
  ~XXX()
  {
    p->a();
  }
};
XXX xxx;

// subimpl.h
#pragma once
struct IA
{
  virtual void a() = 0;
};

class A : public IA
{
public:
  void dothis();
  void a()
  {
    dothis();
  }
};

// subimpl.cpp
#include "subimpl.h"
void A::dothis() {}

>> # ldd -r libexperiments.so | grep undefined
>> undefined symbol: _ZN1A6dothisEv     (./libexperiments.so)

Reply via email to