Я очень новичок в SWIG (на самом деле это мой первый «проект», использующий его), и я столкнулся с ошибкой, которую я не совсем понимаю.Я пытался использовать SWIG для очень маленького фрагмента кода C, например:
src / fft.c
#include "fft.h"
void separate(double complex *a, int n)
{
...
}
void fft2(double complex *x, int n)
{
...
}
src /fft.h
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <complex.h>
#include <math.h>
void separate(double complex *a, int n);
void fft2(double complex *x, int n);
Вот мой файл интерфейса swig:
src / swig / fft.i
%module fft
%{
#include "fft.h"
%}
%include "fft.h"
Поскольку я использую CMake в качестве системы сборки, вот файлы CMakeLists.txt
src / CMakeLists.txt
add_library(
fft SHARED
fft.c
)
set_target_properties(fft PROPERTIES VERSION ${PROJECT_VERSION})
set_target_properties(fft PROPERTIES PUBLIC_HEADER "fft.h")
add_subdirectory(swig)
src / swig / CMakeLists.txt
find_package(SWIG REQUIRED)
include(${SWIG_USE_FILE})
add_subdirectory(python)
src / swig / python / CMakeLists.txt
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_PATH})
set(CMAKE_SWIG_FLAGS "")
set_source_files_properties(../fft.i PROPERTIES CPLUSPLUS ON)
include_directories(../..)
swig_add_library(fft LANGUAGE python SOURCES ../fft.i)
swig_link_libraries(fft ${PROJECT_NAME} ${PYTHON_LIBRARIES})
И здесь выводятся как cmake ..
, так и make
в каталоге build
:
cmake
-- The C compiler identification is AppleClang 10.0.0.10001044
-- The CXX compiler identification is AppleClang 10.0.0.10001044
-- Check for working C compiler:
/Library/Developer/CommandLineTools/usr/bin/cc
-- Check for working C compiler:
/Library/Developer/CommandLineTools/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler:
/Library/Developer/CommandLineTools/usr/bin/c++
-- Check for working CXX compiler:
/Library/Developer/CommandLineTools/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found SWIG: /usr/local/bin/swig (found version "4.0.0")
-- Found PythonLibs:
/usr/local/Frameworks/Python.framework/Versions/3.7/ \
lib/libpython3.7m.dylib (found version "3.7.0")
-- Configuring done
-- Generating done
-- Build files have been written to:
/Users/simon/Documents/projects/fft/build
и make
Scanning dependencies of target fft
[ 20%] Building C object src/CMakeFiles/fft.dir/fft.c.o
[ 40%] Linking C shared library libfft.dylib
[ 40%] Built target fft
[ 60%] Swig source
/Users/simon/Documents/projects/fft/src/swig/python/../../fft.h:6:
Error: Syntax error in input(1).
make[2]: *** [src/swig/python/fftPYTHON_wrap.cxx] Error 1
make[1]: *** [src/swig/python/CMakeFiles/_fft.dir/all] Error 2
make: *** [all] Error 2
Как вы можете видетьЯ нахожусь на macOS (Mojave), разделяемая библиотека в C компилируется, но SWIG не может согласиться с объявлением функции в заголовке.Я попытался удалить complex
(и использовать только double
числа), и это, кажется, работает, поэтому я предполагаю, что файл complex.h
не может быть как-то найден ...
Любая помощьбудет высоко ценится!
Спасибо!