-1

我使用以下方法生成 RTI 代码:

/opt/rti_connext_dds-6.0.0/bin/rtiddsgen -d GENERATED_CODE_DIR -language C++11 -replace IDL_DIR

我的 CMake 文件:

link_libraries(gsl gslcblas nnz12 occi clntsh dl nddsc nddscpp2 pthread)
add_definitions(-DRTI -DRTI_64BIT -DRTI_LINUX -DRTI_UNIX -D_GLIBCXX_DEBUG)
include_directories(-isystem /opt/rti_connext_dds-6.0.0/include/ndds)
include_directories(-isystem /opt/rti_connext_dds-6.0.0/include/ndds/hpp)
include_directories(-isystem /opt/rti_connext_dds-6.0.0/include/ndds/hpp/rti)
include_directories(-isystem /opt/rti_connext_dds-6.0.0/include/ndds/hpp/dds)

现在在编译时,我收到以下错误:

undefined reference to `rti::domain::register_type_plugin(dds::domain::TDomainParticipant<rti::domain::DomainParticipantImpl>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, PRESTypePlugin* (*)(), void (*)(PRESTypePlugin*))'
undefined reference to `dds::core::PreconditionNotMetError::PreconditionNotMetError(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status

有什么我想念的吗?

4

2 回答 2

0

问题是由于 ABI。我正在使用 gcc10.2。我通过添加定义解决了这个问题:

_GLIBCXX_USE_CXX11_ABI 0
于 2020-10-14T10:30:55.083 回答
0

问题是由于 RTI 库和 occi.so 的 ABI 不同。通过使用 occi_gcc53.so 而不是 occi.so 库解决了这个问题。

于 2021-11-18T06:25:37.430 回答