From c6546bb29b25fb96f270257b959426f949eb9418 Mon Sep 17 00:00:00 2001 From: Noah Watkins Date: Wed, 16 Mar 2016 14:12:05 -0700 Subject: [PATCH] buffer: fix iterator_impl visibility through typedef The following program doesn't compile because of symbol visibility issues. While bufferlist::iterator is a class implementation with visibility specified, it is unclear after google-fu how to do the same through typedef. int main() { ceph::bufferlist bl; ceph::bufferlist::const_iterator it = bl.begin(); (void)it; return 0; } [nwatkins@bender ~]$ g++ -Wall -std=c++11 -Iinstall/include -Linstall/lib -o test test.cc -lrados /tmp/cciR9MUj.o: In function `main': test.cc:(.text+0x43): undefined reference to `ceph::buffer::list::iterator_impl::iterator_impl(ceph::buffer::list::iterator const&)' /usr/bin/ld: test: hidden symbol `_ZN4ceph6buffer4list13iterator_implILb1EEC1ERKNS1_8iteratorE' isn't defined /usr/bin/ld: final link failed: Bad value collect2: error: ld returned 1 exit status Signed-off-by: Noah Watkins (cherry picked from commit 16bc3e59325d4057d36cd63a57111ab36fbc50fd) --- src/include/buffer.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/include/buffer.h b/src/include/buffer.h index c786bf27915..363cf635425 100644 --- a/src/include/buffer.h +++ b/src/include/buffer.h @@ -57,10 +57,8 @@ #if __GNUC__ >= 4 #define CEPH_BUFFER_API __attribute__ ((visibility ("default"))) - #define CEPH_BUFFER_DETAILS __attribute__ ((visibility ("hidden"))) #else #define CEPH_BUFFER_API - #define CEPH_BUFFER_DETAILS #endif #if defined(HAVE_XIO) @@ -270,7 +268,7 @@ namespace buffer CEPH_BUFFER_API { private: template - class CEPH_BUFFER_DETAILS iterator_impl + class CEPH_BUFFER_API iterator_impl : public std::iterator { protected: typedef typename std::conditional