5

C ライブラリを変更せずに C++ コードで使用したいと考えています。

ライブラリには、次のような c++ と互換性のないコードのフラグメントが含まれています。

  • C++ キーワードnewdelete
  • _Atomic物体
  • 悪い宣言

C ライブラリを にコンパイルしました.so。また、別の C コードで使用したところ、完全に機能しました (実際、このコードの C++ バージョンを作成したいと考えています)。

私のCMakeLists:

# Specify the minimum CMAKE version required
cmake_minimum_required(VERSION 2.8)

# Project name
project(myproject)

# Header files
set(HEADERS myCpp.h)

# Source files
set(SOURCES myCpp.cpp)
add_executable(myproject myCpp.cpp myCpp.h)

# Link libraries
LINK_DIRECTORIES(/usr/lib/libfrr.so)
target_link_libraries(${PROJECT_NAME}  frr)


set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" )
set(CMAKE_CXX_FLAGS "-fpermissive")

私のヘッダーは次で始まります:

extern "C"{
        #include "lib/libfrr.h"
}

たくさんのエラーがあります。少しコンパイル:

/lib/module.h:88:3: error: expected primary-expression before '.' token
   .r.info = &_frrmod_info,        

/lib/thread.h:123:2: error: '_Atomic' does not name a type
  _Atomic unsigned int total_active;

lib/memory.h:163:13: error: 'struct memtype' has no member named     'n_alloc'
  return mt->n_alloc;

/lib/libfrr.h:88:25: sorry, unimplemented: non-trivial designated     initializers not supported
          __VA_ARGS__};           \
4

1 に答える 1