繁体   English   中英

用Clang ++编译OmniORB4

[英]Compiling OmniORB4 with Clang++

我正在用OmniORB学习Corba,并尝试编译简单的示例程序,但是它不起作用。 不幸的是,很难找到一些信息来做到这一点。

我所做的看起来像:

  1. 我在idl目录中制作了简单的界面文件

     interface IssueAlert { string sendAlert(in string alert); }; 
  2. 使用omniidl -bcxx -Wbexamples echo.idl编译

  3. 我得到结果文件,并使用示例将该代码作为服务器应用程序。

     #include "idl/echo.hh" #include <iostream> using namespace std; class IssueAlert_i : public POA_IssueAlert { public: IssueAlert_i(); virtual ~IssueAlert_i(); char* sendAlert(const char* alert); }; IssueAlert_i::IssueAlert_i(){} IssueAlert_i::~IssueAlert_i(){} char* IssueAlert_i::sendAlert(const char* alert){ cout << "Upcall: " << alert << endl; return CORBA::string_dup(alert); } ////////////////////////////////////////////////////////////////////// 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<IssueAlert_i> issue = new IssueAlert_i(); PortableServer::ObjectId_var issue_id = poa->activate_object(issue); // Obtain a reference to the object, and print it out as a // stringified IOR. obj = issue->_this(); CORBA::String_var sior(orb->object_to_string(obj)); cout << sior << endl; PortableServer::POAManager_var pman = poa->the_POAManager(); pman->activate(); // Block until the ORB is shut down. orb->run(); }catch (CORBA::SystemException& ex) { cerr << "Caught CORBA::" << ex._name() << endl; }catch (CORBA::Exception& ex) { cerr << "Caught CORBA::Exception: " << ex._name() << endl; } return 0; } 
  4. 要编译它,我使用命令:

     clang++ -std=c++17 -Wall -Wextra -Wnarrowing -Wsign-conversion -lomniORB4 -lomnithread -lomniDynamic4 servant.cpp -I/usr/include -L/usr/lib64/ -o server 

yum安装的所有OmniORB东西都在/usr/include/usr/lib64 我得到那个错误:

    /tmp/servant-e9e6b6.o: In function `IssueAlert_i::IssueAlert_i()':
    servant.cpp:(.text+0x148): undefined reference to `_impl_IssueAlert::~_impl_IssueAlert()'
    /tmp/servant-e9e6b6.o: In function `IssueAlert_i::~IssueAlert_i()':
    servant.cpp:(.text+0x198): undefined reference to                 `POA_IssueAlert::~POA_IssueAlert()'
    /tmp/servant-e9e6b6.o: In function `IssueAlert_i::~IssueAlert_i()':
    servant.cpp:(.text+0x201): undefined reference to `_impl_IssueAlert::~_impl_IssueAlert()'
    /tmp/servant-e9e6b6.o: In function `POA_IssueAlert::_this()':
    servant.cpp:
    (.text._ZN14POA_IssueAlert5_thisEv[_ZN14POA_IssueAlert5_thisEv]+0x1e): undefined reference to `IssueAlert::_PD_repoId'
    /tmp/servant-e9e6b6.o:(.rodata+0x68): undefined reference to `_impl_IssueAlert::_dispatch(omniCallHandle&)'
    /tmp/servant-e9e6b6.o:(.rodata+0x70): undefined reference to `_impl_IssueAlert::_ptrToInterface(char const*)'
    /tmp/servant-e9e6b6.o:(.rodata+0x78): undefined reference to `_impl_IssueAlert::_mostDerivedRepoId()'
    /tmp/servant-e9e6b6.o:(.rodata+0xf0): undefined reference to `virtual thunk to _impl_IssueAlert::_ptrToInterface(char const*)'
    /tmp/servant-e9e6b6.o:(.rodata+0x100): undefined reference to `virtual thunk to _impl_IssueAlert::_mostDerivedRepoId()'
    /tmp/servant-e9e6b6.o:(.rodata+0x120): undefined reference to `virtual thunk to _impl_IssueAlert::_dispatch(omniCallHandle&)'
    /tmp/servant-e9e6b6.o:(.rodata+0x288): undefined reference to `typeinfo for POA_IssueAlert'
    /tmp/servant-e9e6b6.o:(.rodata+0x290): undefined reference to `POA_IssueAlert::~POA_IssueAlert()'
    /tmp/servant-e9e6b6.o:(.rodata+0x298): undefined reference to `POA_IssueAlert::~POA_IssueAlert()'
    /tmp/servant-e9e6b6.o:(.rodata+0x2a8): undefined reference to `_impl_IssueAlert::_dispatch(omniCallHandle&)'
    /tmp/servant-e9e6b6.o:(.rodata+0x2b0): undefined reference to `_impl_IssueAlert::_ptrToInterface(char const*)'
    /tmp/servant-e9e6b6.o:(.rodata+0x2b8): undefined reference to `_impl_IssueAlert::_mostDerivedRepoId()'
    /tmp/servant-e9e6b6.o:(.rodata+0x318): undefined reference to `typeinfo for POA_IssueAlert'
    /tmp/servant-e9e6b6.o:(.rodata+0x320): undefined reference to `virtual thunk to POA_IssueAlert::~POA_IssueAlert()'
    /tmp/servant-e9e6b6.o:(.rodata+0x328): undefined reference to `virtual thunk to POA_IssueAlert::~POA_IssueAlert()'
    /tmp/servant-e9e6b6.o:(.rodata+0x330): undefined reference to `virtual thunk to _impl_IssueAlert::_ptrToInterface(char const*)'
    /tmp/servant-e9e6b6.o:(.rodata+0x340): undefined reference to `virtual thunk to _impl_IssueAlert::_mostDerivedRepoId()'
    /tmp/servant-e9e6b6.o:(.rodata+0x360): undefined reference to `virtual thunk to _impl_IssueAlert::_dispatch(omniCallHandle&)'
    /tmp/servant-e9e6b6.o:(.rodata+0x3c8): undefined reference to `typeinfo for POA_IssueAlert'
    /tmp/servant-e9e6b6.o:(.rodata+0x3d0): undefined reference to `virtual thunk to POA_IssueAlert::~POA_IssueAlert()'
    /tmp/servant-e9e6b6.o:(.rodata+0x3d8): undefined reference to `virtual thunk to POA_IssueAlert::~POA_IssueAlert()'
    /tmp/servant-e9e6b6.o:(.rodata+0x458): undefined reference to `typeinfo for _impl_IssueAlert'
    /tmp/servant-e9e6b6.o:(.rodata+0x460): undefined reference to `_impl_IssueAlert::~_impl_IssueAlert()'
    /tmp/servant-e9e6b6.o:(.rodata+0x468): undefined reference to `_impl_IssueAlert::~_impl_IssueAlert()'
    /tmp/servant-e9e6b6.o:(.rodata+0x478): undefined reference to `_impl_IssueAlert::_dispatch(omniCallHandle&)'
    /tmp/servant-e9e6b6.o:(.rodata+0x480): undefined reference to `_impl_IssueAlert::_ptrToInterface(char const*)'
    /tmp/servant-e9e6b6.o:(.rodata+0x488): undefined reference to `_impl_IssueAlert::_mostDerivedRepoId()'
    /tmp/servant-e9e6b6.o:(.rodata+0x4e8): undefined reference to `typeinfo for _impl_IssueAlert'
    /tmp/servant-e9e6b6.o:(.rodata+0x4f0): undefined reference to `virtual thunk to _impl_IssueAlert::~_impl_IssueAlert()'
    /tmp/servant-e9e6b6.o:(.rodata+0x4f8): undefined reference to `virtual thunk to _impl_IssueAlert::~_impl_IssueAlert()'
    /tmp/servant-e9e6b6.o:(.rodata+0x500): undefined reference to `virtual thunk to _impl_IssueAlert::_ptrToInterface(char const*)'
    /tmp/servant-e9e6b6.o:(.rodata+0x510): undefined reference to `virtual thunk to _impl_IssueAlert::_mostDerivedRepoId()'
    /tmp/servant-e9e6b6.o:(.rodata+0x530): undefined reference to `virtual thunk to _impl_IssueAlert::_dispatch(omniCallHandle&)'
    /tmp/servant-e9e6b6.o:(.rodata+0x6d0): undefined reference to `typeinfo for POA_IssueAlert'
    clang-5.0: error: linker command failed with exit code 1 (use -v to see invocation)

有人可以帮助我进行此编译吗?不幸的是,我想做的最终项目必须使用C ++ 17,然后最好还是继续使用此编译器。

找到解决方案:

clang++ -std=c++17 -Wall -Wextra -Wnarrowing -Wsign-conversion -lomniORB4 -lomnithread -lomniDynamic4 servant.cpp idl/echoSK.cc -o server

它只需要在命令中添加echoSK.cc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM