Andere/Neuere libstdc++ benutzen

Hallo,

ich möchte gerne eine Lib in meinem Programm verwenden, die std::regex_iterator verwendet (Wt-4.0.0). Leider unterstützt die libstdc++, die als Standard in LEAP 42.3 verwendet wird, dies (anscheinend) nicht. Vielleicht habe ich nach den falschen Suchbegriffen gesucht, aber ich habe keine wirkliche Lösung für mein Problem gefunden. Soweit ich herausgefunden habe, wird std::regex_iterator ab gcc 4.9 unterstützt. Dementsprechend habe ich gcc und g++ 5 (und auch 7) installiert. Aber auch wenn ich mit g+±7 versuche zu linken, bekomme ich einen Link-Error:


g++-7 -Wl,-O1 -o index.wt main.o application.o   -L/home/oracle/app/oracle/product/12/dbhome_1/lib -L/home/u01/app/oracle/product/12.1.0/dbhome_1/lib -L/u01/app/oracle/product/12.1.0/dbhome_1/lib -L/opt/oracle/app/oracle/product/12.1.0.1/client_1/lib -L/usr/local/lib64 -L/usr/local/lib -L/opt/oracle/product/12.1.0/client_1/lib -L/opt/oracle/app/oracle/product/12.1.0.1/lib -L/usr/lib64/gcc/x86_64-suse-linux/5 -lYpLibWidgets -lYpLibTaskbar -lYpLibMenu -lypconfig -lYpDb -lYpEmail -lYpGeneralInfo -lYpRabbitMq -lYpTypes -lYpHelper -lYpChannelInitialize -lYpChannelCommunity -lYpChannelPreferences -lYpChannelSocial -lYpCommon -lYpChat -lwt -lwthttp -lwtdbo -lclntsh -locci -lQt5Core -L/usr/lib64 -lpthread 
/usr/local/lib/libwt.so: undefined reference to `std::regex_iterator<__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::regex_traits<char> >::regex_iterator()'

Wie man sehen kann, habe ich auch versucht, mit “-L…” den Pfad für gcc 5 mitzugeben, leider genau so erfolglos.

Kann mir jemand helfen, die richtige Lib einzubinden (ggf. sagen, was noch installiert werden muss)?

Gruß

PS: Sorry, falls ich hier was falsch formatiert habe
Torsten

g+±7 wählt automatisch die korrecte libstdc++

[a4z@t460p ~/tmp] [system] (18:53:35)
A:\> cat tmpcode.cpp 
#include <regex>
#include <iterator>
#include <iostream>
#include <string>
 
int main()
{
    const std::string s = "Quick brown fox.";
 
    std::regex words_regex("^\\s]+");
    auto words_begin = 
        std::sregex_iterator(s.begin(), s.end(), words_regex);
    auto words_end = std::sregex_iterator();
 
    std::cout << "Found " 
              << std::distance(words_begin, words_end) 
              << " words:
";
 
    for (std::sregex_iterator i = words_begin; i != words_end; ++i) {
        std::smatch match = *i;                                                 
        std::string match_str = match.str(); 
        std::cout << match_str << '
';
    }   
}


[a4z@t460p ~/tmp] [system] (18:53:39)                                                                                                                                                              
A:\> g++-7 tmpcode.cpp                                                                                                                                                                             
                                                                                                                                                                                                   
[a4z@t460p ~/tmp] [system] (18:53:49)                                                                                                                                                              
A:\> ./a.out                                                                                                                                                                                       
Found 3 words:                                                                                                                                                                                     
Quick                                                                                                                                                                                              
brown                                                                                                                                                                                              
fox.               

kontrolliere ob du libstdc++6-devel-gcc7 installiert hast

Ja, die ist installiert. Tatsächlich kann ich Dein Beispiel auch compilieren und ausführen. Kann es an den oracle-libs liegen, das die auch mit g+±7 compiliert werden müssen? Oder anderen verwendeten libs?