0
在Go中包含OpenJtalk,文件已成功包含,并且引用的类型没有问题,但功能会触发undefined reference
错误。包含文件中的CGO未定义参考
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/
Alternaively(如果有的话):'// #cgo pkg配置:onelib anotherlib' – jimt 2015-04-03 20:49:23
这适用于所有减去'-L /家庭/流浪者/ open_jtalk /仲裁处/ src目录-llibmecab':**/usr/bin/ld:找不到-llibmecab **。 而且我在该文件夹和'/ usr/local/lib /'中都有** libmecab **,包括静态和动态。 – localhost 2015-04-03 21:13:12
-lmecab(删除lib)? – 2015-04-03 21:19:11