2017-09-19 11 views
1

그래서 나는 다음과 같은 시도에 처음으로 꿀꺽 꿀꺽에서 살펴 보았다 :Golang에서 일부 C를 제거한 이후로 SWIG가 구식이 되었습니까? 내가 <code>open-vcdiff</code>위한 이동 래퍼를 생성하기 위해 노력했습니다

godelta.swig

%module godelta 
%include "include/godelta.hpp" 

godelta.hpp

#include "config.h" 
#include <assert.h> 
#include <errno.h> 
#ifdef WIN32 
#include <fcntl.h> 
#include <io.h> 
#endif // WIN32 
#include <stdio.h> 
#include "google/vcdecoder.h" 
#include "google/vcencoder.h" 
#include "google/jsonwriter.h" 
#include "google/encodetable.h" 
#include "unique_ptr.h" // auto_ptr, unique_ptr 

#ifndef HAS_GLOBAL_STRING 

#endif // !HAS_GLOBAL_STRING 

static const size_t kDefaultMaxTargetSize = 1 << 26;  // 64 MB 

namespace godelta { 

    class Godelta { 
    public: 
     Godelta(); 
     ~Godelta(); 

     bool Encode(); 
     bool Decode(); 
     bool DecodeAndCompare(); 

     int opt_buffersize; 
     int opt_max_target_window_size; 
     int opt_max_target_file_size; 

    private: 
     input file 
     static bool FileSize(FILE* file, size_t* file_size); 
     bool OpenFileForReading(const string& file_name, 
          const char* file_type, 
          FILE** file, 
          std::vector<char>* buffer); 
     bool OpenDictionary(); 
     bool OpenInputFile() { 
      return OpenFileForReading(input_file_name_, 
            input_file_type_, 
            &input_file_, 
            &input_buffer_); 
     } 

     bool OpenOutputFile(); 
     bool OpenOutputFileForCompare() { 
      return OpenFileForReading(output_file_name_, 
            output_file_type_, 
            &output_file_, 
            &compare_buffer_); 
     } 

     bool ReadInput(size_t* bytes_read); 
     bool WriteOutput(const string& output); 
     bool CompareOutput(const string& output); 

     std::vector<char> dictionary_; 

     UNIQUE_PTR<open_vcdiff::HashedDictionary> hashed_dictionary_; 

     const char* input_file_type_; 
     const char* output_file_type_; 

     string input_file_name_; 
     string output_file_name_; 

     FILE* input_file_; 
     FILE* output_file_; 

     std::vector<char> input_buffer_; 
     std::vector<char> compare_buffer_; 

     Godelta(const Godelta&); // NOLINT 
     void operator=(const Godelta&); 
    }; 

} // namespace godelta 

Swig는 잘 작동하여 파일 godelta_wrap.cxx, godelta_gc.cgodelta.go을 생성합니다.

#include "runtime.h" 
#include "cgocall.h" 

오류 발생 :

godelta_gc.c:2:10: fatal error: 'runtime.h' file not found 

내가 그 파일에 대한 모든 곳에서 보았다가, 심지어 GitHub의에 이동 저장소를 검색 지금 직면하고있어 문제가 포함 생성하는 점이다. 나는 Go에서 그 파일의 대체물 인 것만 찾는 것입니다. 그런데

, 내 이동 버전은 다음과 같습니다

go version go1.9 darwin/amd64 

연타 :

Apple LLVM version 8.1.0 (clang-802.0.42) 
Target: x86_64-apple-darwin16.7.0 
Thread model: posix 
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin 

그리고 꿀꺽 꿀꺽 :

주제에 어떤 통찰력이 높게 평가 될 것이다
SWIG Version 3.0.12 
Compiled with g++ [x86_64-apple-darwin16.7.0] 
Configured options: +pcre 

, 특히 이 오류없이 패키지에 go build을 실행할 수있는 경우 :-)

+2

무료 장기를위한 원 스톱 소스 인 "Guthub"! ... 내가 편집 하겠지만 후손을 위해이 아름다운 오타를 보존하고 싶었다;) – Thomas

+0

아야! 내 잘못이야. 나는 Github에게 어떤 경의도 표하지 않는다 :-) – Sthe

답변

2

내 Swig 명령에 깃발이없는 것 같습니다.

swig -c++ -go -cgo -intgosize 64 godelta.swig 

그것은 지금 잘 작동 것 : 나는 -c++-cgo과 함께 끝나는 포함했는데,

swig -go -intgosize 64 godelta.swig 
그러나 issue에 지적했듯이 나는 결국 신청 : 내 원래의 명령이처럼 보였다 -)