[pcre-dev] [Bug 1275] New: pcrecpp library breaks ABI in 7.0…

Top Page
Delete this message
Author: Petr Pisar
Date:  
To: pcre-dev
Subject: [pcre-dev] [Bug 1275] New: pcrecpp library breaks ABI in 7.0 without soname bump
------- You are receiving this mail because: -------
You are on the CC list for the bug.

http://bugs.exim.org/show_bug.cgi?id=1275
           Summary: pcrecpp library breaks ABI in 7.0 without soname bump
           Product: PCRE
           Version: 7.0
          Platform: Other
        OS/Version: Linux
            Status: NEW
          Severity: bug
          Priority: medium
         Component: Code
        AssignedTo: ph10@???
        ReportedBy: ppisar@???
                CC: pcre-dev@???



Hello,

I got a report that libpcrecpp library between releases 6.6 and 7.8 are not
binary compatible. If you compile simple C++ application against pcre < 7.0:

#include <pcrecpp.h>
#include <string>
#include <iostream>

using namespace::std;

int main(int argc, char *argv[])
{
    pcrecpp::RE re("h.*o");
    return 0;
}


and then try to run it against pcre >= 7.0, you get error from dynamic linker:

./test: symbol lookup error: ./test: undefined symbol:
_ZN7pcrecpp2RE4InitEPKcPKNS_10RE_OptionsE


This is because the signature of RE::Init() method has changed from:

void Init(const char *pattern, const RE_Options* options);

to:

void Init(const string& pattern, const RE_Options* options);


This can be verified by checking the libpcrecpp.so.0 symbol table (nm -DC
libpcrecpp.so.0 | grep -F 'pcrecpp::RE::Init').

But checking the soname reveals both libraries have the same soname.

I propose to bump the soname from libpcrecpp.so.0 to libpcrecpp.so.1.


(Some distributors decided to re-introduce old symbol using a wrapper around
the new RE::Init(), like
<https://bugs.launchpad.net/ubuntu/+source/pcre3/+bug/130428>.)


--
Configure bugmail: http://bugs.exim.org/userprefs.cgi?tab=email