包含文件中的 CGO 未定义引用

在 Go 中结束 OpenJtalk,文件被成功包含并且类型被引用没有问题,但函数会触发undefined reference错误。


jtalk.go:


package main


// #cgo CFLAGS: -I/home/vagrant/open_jtalk/njd [...etc]

/*

#include <stdio.h>

#include <stdlib.h>

#include <stdarg.h>

#include <string.h>

#include <math.h>


// Main headers 

#include "mecab.h"

#include "njd.h"

#include "jpcommon.h"

#include "HTS_engine.h"


// Sub headers 

#include "text2mecab.h"

#include "mecab2njd.h"

#include "njd_set_pronunciation.h"

#include "njd_set_digit.h"

#include "njd_set_accent_phrase.h"

#include "njd_set_accent_type.h"

#include "njd_set_unvoiced_vowel.h"

#include "njd_set_long_vowel.h"

#include "njd2jpcommon.h"

*/

import "C"


type Open_JTalk struct {

   mecab C.Mecab           each of these struct references are fine

   njd C.NJD 

   jpcommon C.JPCommon 

   engine C.HTS_Engine 

}


func (open_jtalk *Open_JTalk) Open_JTalk_initialize() {

   C.Mecab_initialize(&open_jtalk.mecab)             // when any function is called the error happens

   C.NJD_initialize(&open_jtalk.njd)

   C.JPCommon_initialize(&open_jtalk.jpcommon)

   C.HTS_Engine_initialize(&open_jtalk.engine)

}


func main() {


}

奇怪的是,这些相同的函数是在类型之后声明的:


mecab.h


// line 1584

typedef struct _Mecab{

   char **feature;

   int size;

   mecab_t *mecab;

} Mecab;


BOOL Mecab_initialize(Mecab *m);

项目网页:http : //open-jtalk.sourceforge.net/


拉风的咖菲猫
浏览 264回答 1
1回答

四季花海

您需要添加LDFLAGS带有库路径和名称的cgo 链接器选项 ( )。例如// #cgo CFLAGS: -Iyour-include-path// #cgo LDFLAGS: -Lyour-library-path -lyour-library-name-minus-the-lib-part
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go