Я пытался создать оболочки C # для RDKit, но, к сожалению, я продолжаю преодолевать препятствия.
Есть две сборки, на которые я смотрел. Я документирую первый здесь. Другое можно найти здесь: ( Попытка собрать оболочки C # для RDKit с помощью build.bat из bp-kelley / rdkit-csharp )
Документы из RDKit / Code / JavaWrappers / csharp_wrapper
Первый найден в https://github.com/rdkit/rdkit.
Оболочки C # с инструкциями по сборке находятся в ./Code/JavaWrappers/csharp_wrapper, найденном по адресу: https://github.com/rdkit/rdkit/tree/master/Code/JavaWrappers/csharp_wrapper
Моя первая попытка скомпилировать используемые обертки, пытаясь собрать их. После этого README: https://github.com/rdkit/rdkit/blob/master/Code/JavaWrappers/csharp_wrapper/README
Для сборки на Windows:
Поскольку cmake ничего не знает о C #, есть несчастный
ручной шаг, участвующий в этом.
- Убедитесь, что переменная конфигурации cmake
Для RDK_BUILD_SWIG_CSHARP_WRAPPER установлено значение ON.
- Запустите cmake, чтобы сгенерировать файл решения и открыть его в Visual
Студия.
- Выберите опцию, чтобы добавить существующий проект и добавить
$ RDBASE / Code / JavaWrappers / csharp_wrapper / RDKit2DotNet.csproj
- Щелкните правой кнопкой мыши на добавленном проекте (с именем RDKit2DotNet) и добавьте
зависимость от RDKFuncs (это проект, который создает C ++
dll, что нужно проекту C #)
- Сборка проекта RDKit2DotNet.
Ваш каталог бинов
($ RDBASE / Code / JavaWrappers / csharp_wrapper / bin / Release, если вы сделали
Выпуск сборки) теперь содержит две библиотеки DLL:
- RDKFuncs.dll - это библиотека C ++, содержащая функциональность RDKit
- RDKit2DotNet.dll содержит оболочку C #. Чтобы использовать оболочки в ваших собственных проектах, вы должны скопировать обе библиотеки в свой проект
каталог и добавить ссылку на RDKit2DotNet.dll
Каталог RDKitCSharpTest содержит пример тестового проекта и некоторые
код, который очень просто использует функциональность оболочки.
Чтобы запустить cmake
, я обновил CMakeLists.txt, чтобы сообщить ему, как найти swig и установить RDK_BUILD_SWIG_CSHARP_WRAPPER ON
следующим образом:
cmake_minimum_required(VERSION 3.14)
project (GraphMolCSharp)
set(SWIG_FOUND TRUE) # This has been added
set(SWIG_DIR ${CMAKE_CURRENT_SOURCE_DIR}) # This has been added
set(SWIG_EXECUTABLE swig.exe) # This has been added
set(SWIG_VERSION 4.0) # This has been added
find_package (SWIG) # This has been added
include (UseSWIG) # This has been added
include_directories( ${RDKit_ExternalDir} )
SET(RDK_BUILD_SWIG_CSHARP_WRAPPER ON) # This has been added
# find the gmcs executables on non-windows systems:
if(NOT WIN32)
find_program(GMCS_EXE gmcs)
if (NOT GMCS_EXE)
MESSAGE ("gmcs (executable) is not found. Please add it to PATH and rerun cmake.")
MESSAGE(FATAL_ERROR "Cannot find required executable gmcs")
endif (NOT GMCS_EXE)
endif(NOT WIN32)
SET_SOURCE_FILES_PROPERTIES(GraphMolCSharp.i PROPERTIES CPLUSPLUS ON )
# Setup a few variables for environment-specific things
if(WIN32)
ADD_DEFINITIONS("/W3 /wd4716 /bigobj")
SET(PATH_SEP ";")
SET(COPY_CMD xcopy ${COPY_SOURCE} ${COPY_DEST} /Y /I)
else()
SET(PATH_SEP ":")
SET(COPY_CMD cp -p ${COPY_SOURCE} ${COPY_DEST})
endif()
# Coax SWIG into playing nicely with Apple environments
if(APPLE)
SET(CMAKE_SIZEOF_VOID_P 4)
endif(APPLE)
if(CMAKE_SIZEOF_VOID_P MATCHES 4)
SET(CMAKE_SWIG_FLAGS -namespace "GraphMolWrap")
else()
if (WIN32)
SET(CMAKE_SWIG_FLAGS -namespace "GraphMolWrap" "-DSWIGWORDSIZE64" "-DSWIGWIN")
else()
SET(CMAKE_SWIG_FLAGS -namespace "GraphMolWrap" "-DSWIGWORDSIZE64")
endif()
endif()
SET(CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_SOURCE_DIR}/swig_csharp )
if(RDK_BUILD_INCHI_SUPPORT)
SET(CMAKE_SWIG_FLAGS "-DRDK_BUILD_INCHI_SUPPORT" ${CMAKE_SWIG_FLAGS} )
endif()
if(RDK_BUILD_AVALON_SUPPORT)
SET(CMAKE_SWIG_FLAGS "-DRDK_BUILD_AVALON_SUPPORT" ${CMAKE_SWIG_FLAGS} )
endif()
FILE(GLOB SWIG_SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/../*.i")
# we added all source files, now remove the ones that we're not supporting in this build:
if(NOT RDK_BUILD_AVALON_SUPPORT)
LIST(REMOVE_ITEM SWIG_SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/../AvalonLib.i")
endif()
if(NOT RDK_BUILD_INCHI_SUPPORT)
LIST(REMOVE_ITEM SWIG_SRC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/../Inchi.i")
endif()
SET(SWIG_MODULE_RDKFuncs_EXTRA_DEPS ${SWIG_SRC_FILES} )
SWIG_ADD_LIBRARY(RDKFuncs TYPE MODULE LANGUAGE CSharp SOURCES GraphMolCSharp.i )
# it doesnt seem like the threading libs should need to be here, but
# as of Oct 2012 using boost 1.51 under at least ubuntu 12.04 we get a
# link error if they aren't there.
SWIG_LINK_LIBRARIES(RDKFuncs ${RDKit_Wrapper_Libs}
${RDKit_THREAD_LIBS} )
INSTALL(TARGETS RDKFuncs
DESTINATION ${CMAKE_CURRENT_SOURCE_DIR} )
if(NOT WIN32)
# code adapted from the wrapper code for
# GDCM: http://gdcm.svn.sf.net/viewvc/gdcm/trunk/Wrapping/Java/CMakeLists.txt?view=markup
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/RDKit2DotNet.dll
COMMAND ${CMAKE_COMMAND} -E make_directory swig_csharp
## 1. run this custom command only after swig has been run.
COMMAND ${GMCS_EXE} -out:RDKit2DotNet.dll -t:library "swig_csharp/*.cs"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS "${swig_generated_file_fullname}"
)
ADD_CUSTOM_TARGET(RDKFuncsDLL ALL
DEPENDS RDKFuncs ${CMAKE_CURRENT_SOURCE_DIR}/RDKit2DotNet.dll
COMMENT "building mono dll"
)
endif(NOT WIN32)
Это создает много новых файлов и один .sln
файл с именем GraphMolCSharp.sln
.
Затем я смог выполнить остальные шаги в README. Я открыл GraphMolCSharp.sln
и добавил RDKit2DotNet.csproj
как проект и добавил RDKfuncs
как зависимость сборки. Но построение этого дало много ошибок в Visual Studio, начиная с:
Could not copy the file "D:\Desktop\rdkit-master\Code\JavaWrappers\csharp_wrapper\RDKFuncs.dll" because it was not found. RDKit2DotNet
Тогда много Unable to find x
ошибок.
Если кто-нибудь может подсказать, что я мог сделать неправильно, пожалуйста, дайте мне знать.