Как построить программу, используя omniORB? - PullRequest
0 голосов
/ 16 апреля 2020

Я установил omniORB для C ++ и скачал его отсюда http://omniorb.sourceforge.net/download.html. Я пытался собрать эту программу (main. cpp):

#include "echo.hh"
#ifdef HAVE_STD
    #include <iostream>
    using namespace std;
#else
    #include <iostream.h>
#endif

class Echo_i : public POA_Echo {
public:
    inline Echo_i() {}
    virtual ~Echo_i() {}
    virtual char* echoString(const char* mesg);
};

char* Echo_i::echoString(const char* mesg) {
    return CORBA::string_dup(mesg);
}

static void hello(Echo_ptr e) {
    if( CORBA::is_nil(e) ) {
        cerr << "hello: The object reference is nil!" << endl;
        return;
    }

    CORBA::String_var src = (const char*) "Hello!";
    CORBA::String_var dest = e->echoString(src);
    cout << "I said, \"" << (char*)src << "\"." << endl
    << "The Echo object replied, \"" << (char*)dest <<"\"." << endl;
}

int main(int argc, char** argv) {
    try {
        CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
        CORBA::Object_var
            obj = orb->resolve_initial_references("RootPOA");
        PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);

        PortableServer::Servant_var<Echo_i> myecho = new Echo_i();
        PortableServer::ObjectId_var myechoid = poa->activate_object(myecho);
        Echo_var myechoref = myecho->_this();
        PortableServer::POAManager_var pman = poa->the_POAManager();
        pman->activate();
        hello(myechoref);
        orb->destroy();
    }
    catch (CORBA::SystemException& ex) {
        cerr << "Caught CORBA::" << ex._name() << endl;
    }
    catch (CORBA::Exception& ex) {
        cerr << "Caught CORBA::Exception: " << ex._name() << endl;
    }
    return 0;
}

Создал файл echo.idl:

interface Echo {
    string echoString(in string mesg);
};

и запустил omniidl -bcxx echo.idl. Когда я запускаю g++ main.cpp -o main, он возвращает:

/usr/bin/ld: /tmp/ccQ9WBKJ.o: in function `Echo_i::echoString(char const*)':
main.cpp:(.text+0x18): undefined reference to `CORBA::string_dup(char const*)'
... ~50 lines of linker message
collect2: error: ld returned 1 exit status

GNU Linker не может получить определения omniORB, почему? Как решить эту проблему и получить двоичный файл?

...