Swig from C: Ошибка: синтаксическая ошибка в вводе (1) - PullRequest
0 голосов
/ 11 октября 2018

Я очень новичок в 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 не может быть как-то найден ...

Любая помощьбудет высоко ценится!

Спасибо!

...