Problem beim Linken einer statischen Library.



  • Hallo,

    ich habe folgendes Problem:

    Ich habe eine statische Library Namens ccns_util.a geschrieben und kompiliert.
    Jetzt möchte ich diese Library gegen ein Testprogramm linken und dort die Funktion getFilters() der Klasse PipelineConfigurationParser aufrufen. PipelineConfigurationParser ist als Singleton implementiert.

    Allerdings bekomme ich beim Kompilieren folgende Fehlermeldung:

    g++ -m64 -o bin/tests build/test_main.o build/binarybuffer.o build/name.o build/ccnssettings.o build/filters.o build/packetmanager.o build/cryptoppdigest.o build/dsa.o -L/usr/local/lib -L/usr/lib -lpthread -lboost_unit_test_framework ../src/crypto/lib/libccns_crypto.a ../src/util/lib/libccns_util.a -lcryptopp -lboost_system -lboost_filesystem -lxml2
    build/filters.o: In function CCNS\_Filter\_Tests::some\_tests::test\_method()': /home/dposch/ccns/tests/util\_test/filters.cc:18: undefined reference toccns::util::PipelineConfigurationParser::getFilters(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'

    Könnt ihr mir sagen was da beim Linken nicht klappt?

    Hier ein bisschen Code:

    Headerfile des PipelineConfigurationParser der Library ccns_util.a

    namespace ccns
    {
        namespace util
        {
            class PipelineConfigurationParser
            {
            public:
                static PipelineConfigurationParser* Instance();
                boost::container::list<std::string> getFilters(const std::string &pipelineName, const std::string &file);
    
            protected:
                static PipelineConfigurationParser *parser;
                PipelineConfigurationParser();
    
            };
        }
    }
    

    Aufruf der Funktion getFilters() im Testprogram;

    using namespace ccns::util;
    BOOST_AUTO_TEST_CASE( some_tests )
    {
        std::string pipelinename = "pipeline2";
        std::string file = "/home/dposch/ccns/tests/util_test/filters.config";
    
        boost::container::list<std::string> list = PipelineConfigurationParser::Instance()->getFilters(pipelinename,file);
    }
    

    Anmerkung: Alle anderen Objekte und Funktionen der ccns_util.a Library lassen sich ohne Probleme instanzieren bzw. aufrufen 😕 .

    LG
    Daniel



  • Dann wirst du die Funktion wohl nicht implementiert haben.



  • haha fast richtig 😉

    Im .cc war die Funktion

    nicht alls KlassenFunktion definiert 🙄

    boost::container::list<std::string> getFilters(const std::string &pipelineName, const std::string &file)
    
    boost::container::list<std::string> PipelineConfigurationParser::getFilters(const std::string &pipelineName, const std::string &file)
    

    Des übersehe ich immer 😃

    LG
    Daniel


Log in to reply