qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alan Conway (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (QPID-3163) Define public/private library symbols with gcc
Date Thu, 28 Jul 2011 18:36:10 GMT

    [ https://issues.apache.org/jira/browse/QPID-3163?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13072475#comment-13072475

Alan Conway commented on QPID-3163:

Work to date is on branch https://svn.apache.org/repos/asf/qpid/branches/qpid-3163.

The bulk of the extern declarations etc. are in place, however I'm stuck on a run time failure.
The boost::any code, used by boost::program_options, used by qpid/Options, does a typeinfo
comparison which fails due to  multiple typeinfo symbols for std::string. (See http://gcc.gnu.org/wiki/Visibility).

One (impractical) solution that I have verified is to wrap every #include <string> like
#pragma GCC visibility push(default)
#include <string>
#pragma GCC visibility pop

This includes occurences in system header files! Clearly not practical.

Another solution would be to re-write qpid::Options to avoid boost::options.

There are further issues to resolve after getting past this one, not clear how many although
I think we're nearly there.

> Define public/private library symbols with gcc
> ----------------------------------------------
>                 Key: QPID-3163
>                 URL: https://issues.apache.org/jira/browse/QPID-3163
>             Project: Qpid
>          Issue Type: Improvement
>          Components: C++ Client
>    Affects Versions: 0.11
>            Reporter: Alan Conway
>            Assignee: Alan Conway
>             Fix For: 0.11
> Currently qpid libraries built with gcc export all symbols, public and private. This
makes it difficult to define the public interface of our libraries and to create automated
tools that can  verify compatibility between library versions or detect incompatible changes.
> gcc provides a flag flag to make symbols hidden by default (--fvisibility=hidden), and
the qpid source code already has macros to mark public functions, the FOO_EXTERN macros defined
to support exporting the public API on Windows. By suitably defining these macros for gcc
we can control the symbols exported by our libraries. 
> For more details:
> http://gcc.gnu.org/wiki/Visibility
> http://gcc.gnu.org/faq.html#dso

This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira


Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org

View raw message