I would like to use the Japanese morpheme analyzer "MeCab"( [https://github.com/taku910/mecab](https://github.com/taku910/mecab) ) in the Nim language.
Since I use Windows 10, I thought about how to load the DLL in the Nim language and use the functions defined in the DLL. However, an error occurs because the DLL maybe cannot be loaded. On the Mac, I was able to run it in the following way. It calls the libMeCab.dylib file. [https://qiita.com/nunulk/items/da69b2cc8643fd8a7f8f](https://qiita.com/nunulk/items/da69b2cc8643fd8a7f8f) I tried to edit this code for Windows. **parser.nim** {.link: "libmecab.dll".} {.emit: """ using namespace MeCab; """.} const header = "<MeCab.h>" type MeCabModelObj {.final, header: header, importcpp: "MeCab::Model".} = object type MeCabModel = ptr MeCabModelObj type MeCabTaggerObj {.final, header: header, importcpp: "MeCab::Tagger".} = object type MeCabTagger = ptr MeCabTaggerObj type MeCabLatticeObj {.final, header: header, importcpp: "MeCab::Lattice".} = object type MeCabLattice = ptr MeCabLatticeObj type ccstring {.importc:"const char*".} = object proc createModel(argv: cstring): MeCabModel {.header: header, importcpp: "createModel(@)".} proc createTagger(this: MeCabModel): MeCabTagger {.header: header, importcpp: "#.createTagger()".} proc createLattice(this: MeCabModel): MeCabLattice {.header: header, importcpp: "#.createLattice()".} proc setSentence(this: MeCabLattice, sentence: cstring): void {.header: header, importcpp: "#.set_sentence(@)".} proc parse(this: MeCabTagger, lattice: MeCabLattice): bool {.header: header, importcpp: "#.parse(@)".} proc toString(this: MeCabLattice): ccstring {.header: header, importcpp: "#.toString()".} type ParserObj = object tagger: MeCabTagger lattice: MeCabLattice type Parser* = ref ParserObj proc createParser*(): Parser = const option: cstring = "" let model = createModel(option) let tagger = createTagger(model) let lattice = createLattice(model) return Parser(tagger: tagger, lattice: lattice) proc parse*(parser: Parser, sentence: string): string = parser.lattice.setSentence(sentence) let ret = parser.tagger.parse(parser.lattice) if not ret: raise newException(ValueError, "failed to parse.") let str = cast[cstring](parser.lattice.toString()) return $str Run **main.nim** import os import parser proc main() = let arguments = commandLineParams() if arguments.len() < 1: echo "Input any text >" return let sentence = arguments[0] let parser = createParser() let str = parser.parse(sentence) echo str when isMainModule: main() Run And I executed the following command. nim cpp main.nim Run However, compiling C + + may fail or cause an error. parser.nim.cpp:(.text+0x119): undefined reference to `__imp__ZN5MeCab11createModelEPKc' collect2.exe: error: ld returned 1 exit status Run What is the cause of this? I think there is something wrong with how the DLL loads. Please let me know the solution. Thank you.
