Project

General

Profile

Actions

Bug #14788

closed

librados (C++) linker error (undefined reference)

Added by Jesse Williamson about 8 years ago. Updated over 7 years ago.

Status:
Resolved
Priority:
Normal
Assignee:
Category:
-
Target version:
-
% Done:

0%

Source:
Community (dev)
Tags:
Backport:
infernalis
Regression:
Yes
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Pull request ID:
Crash signature (v1):
Crash signature (v2):

Description

When compiling a patched librados C++ example (or other C++ programs-- see included patchfile), pointing to the headers in the git repository causes linker errors
against librados (note that the stock Makefile uses only the system-wide headers and libraries, so here we're manually pointing at
the local build):

g++ -g -c hello_world.cc -o hello_world.o -std=c++0x -I../../src/include
g++ -I../../src/include -g hello_world.o -o librados_hello_world -Wl,-rpath,../../../ceph/src/.libs -L../../../ceph/src/.libs/ -lrados
hello_world.o: In function `ceph::buffer::list::iterator_impl<false>::iterator_impl(ceph::buffer::list*, unsigned int)':
/home/jwilliamson/work/ceph/ceph/examples/librados/../../src/include/rados/buffer.h:289: undefined reference to `ceph::buffer::list::iterator_impl<false>::advance(int)'

Using the system-wide headers results in successful linkage:
g++ -g -c hello_world.cc -o hello_world.o -std=c++0x
g++ -g hello_world.o -o librados_hello_world -Wl,-rpath,../../../ceph/src/.libs -L../../../ceph/src/.libs/ -lrados


Files


Related issues 2 (0 open2 closed)

Related to Ceph - Bug #13429: bufferlist::iterator no longer ABI compatibleResolvedJason Dillaman10/09/2015

Actions
Copied to Ceph - Backport #14916: infernalis: librados (C++) linker error (undefined reference)RejectedNathan CutlerActions
Actions #1

Updated by Joao Eduardo Luis about 8 years ago

  • Source changed from other to Community (dev)
Actions #2

Updated by Kefu Chai about 8 years ago

  • Status changed from New to 12
  • Assignee set to Kefu Chai

so it sounds like a regression after introducing the buffer::list::const_iterator.

Actions #3

Updated by Brad Hubbard about 8 years ago

What version is this?

That missing semicolon was fixed last year.

I can't reproduce this behaviour on master, can you Jesse?

Actions #4

Updated by Kefu Chai about 8 years ago

  • Related to Bug #13429: bufferlist::iterator no longer ABI compatible added
Actions #5

Updated by Kefu Chai about 8 years ago

  • Status changed from 12 to New

this reminds me of #13429.

turns out i was compiling with the header in my source repo, while linking against the packaged librados in system.

Actions #6

Updated by Kefu Chai about 8 years ago

if that's the case which Jesse ran into. it's because the new buffer.h is referencing the symbols of buffer::list::iterator_impl<false>::*. so, if the client code is compiled using the new header file, the resulting object code will need the (weak) symbols of buffer::list::iterator_impl<false>::*.

but if the client code is compiled using the old header file, it will linked just fine with the new library.

the buffer::list::iterator_impl template class was introduced when adding list::const_iterator, in hope to consolidate the shared bits of list::const_iterator and list::iterator. but it introduced some ABI incompatibilities. #13429 addressed some of them by re-exposing the methods offered by list::iterator in hammer using their old symbol names (signatures). but it does not remove the dependency to the buffer::list::iterator_impl symbols.

i will try to add __attribute__ ((visibility ("hidden"))) to the template to hide its symbol to see how it works.

Actions #7

Updated by Kefu Chai about 8 years ago

  • Status changed from New to Fix Under Review
Actions #8

Updated by Kefu Chai about 8 years ago

  • Backport set to infernalis
Actions #9

Updated by Kefu Chai about 8 years ago

  • Status changed from Fix Under Review to Pending Backport
Actions #10

Updated by Nathan Cutler about 8 years ago

  • Copied to Backport #14916: infernalis: librados (C++) linker error (undefined reference) added
Actions #11

Updated by Loïc Dachary over 7 years ago

  • Status changed from Pending Backport to Resolved
Actions

Also available in: Atom PDF