我有一个用于C ++库(mylib.so)的工作swig包装器。现在我想静态地将mylib.so链接到包装器库(mylib_wrapper.so)。目前我用cmake构建我的包装器。
目前我有以下cmake文件:
cmake_minimum_required(VERSION 2.8)
find_package(SWIG REQUIRED)
include(${SWIG_USE_FILE})
find_package(Ruby)
include_directories(${RUBY_INCLUDE_PATH} ${CMAKE_CURRENT_SOURCE_DIR})
set(CMAKE_SWIG_FLAGS "")
set(MODULE_NAME ruby_module)
set(CMAKE_SWIG_OUTDIR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
set_source_files_properties(${MODULE_NAME}.i PROPERTIES CPLUSPLUS ON)
swig_add_module(${MODULE_NAME} ruby ${MODULE_NAME}.i ruby_wrapper.cpp)
swig_link_libraries(${MODULE_NAME} ${MAIN_LIBRARY_NAME})
swig_link_libraries(${MODULE_NAME} ${RUBY_LIBRARIES})
和.i文件:
%module ruby_module
%{
#include "ruby_wrapper.h"
%}
%import std_string.i
%include "ruby_module.h"
和头文件: ruby_module.h和ruby_wrapper.h 具有相同的内容。
#include <string>
class MyClass
{
public:
MyClass();
~MyClass();
public:
std::string myfunc(const std::string& path);
};
在ruby_wrapper.cpp文件中是mylib.so的覆盖函数。