我正在尝试编译 typescript、tsx 和 python 解析器以与 neovim 一起使用,但是当我按照
tree-sitter 跟踪问题的指示运行
gcc -o parser.so -shared src/parser.c -Os -I./src
时,我得到:
Undefined symbols for architecture x86_64:
"_tree_sitter_tsx_external_scanner_create", referenced from:
_tree_sitter_tsx.language in parser-eb4e9b.o
"_tree_sitter_tsx_external_scanner_deserialize", referenced from:
_tree_sitter_tsx.language in parser-eb4e9b.o
"_tree_sitter_tsx_external_scanner_destroy", referenced from:
_tree_sitter_tsx.language in parser-eb4e9b.o
"_tree_sitter_tsx_external_scanner_scan", referenced from:
_tree_sitter_tsx.language in parser-eb4e9b.o
"_tree_sitter_tsx_external_scanner_serialize", referenced from:
_tree_sitter_tsx.language in parser-eb4e9b.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我已经运行了 npm 构建步骤,并尝试了构建中的 make 文件,但我无法获得最终的
.so
文件。
undefined symbol: tree_sitter_parsername_external_scanner_create
// grammar.js
name: 'parsername',
// scanner.cc
void *tree_sitter_oldparsername_external_scanner_create() {
return new Scanner();
}
快速修复:替换扫描仪源中的名称
sed -i -E 's|(tree_sitter)_oldparsername_|\1_parsername_|g' src/scanner.*
this,对于 c++ 来说有点不同。
gcc -shared -o parser.so -I./src src/parser.c src/scanner.c -Os
如果您有旧版本的 GCC,您可以尝试添加 --std=c99
和
-fPIC
。 el7 附带
gcc
4.8.5,这对我来说适用于多个解析器。
gcc --std=c99 -shared -o parser.so -I./src src/parser.c src/scanner.c -Os -fPIC
偏离主题,但相关:如果您想将 nvim-treesitter 与较旧的编译器一起使用,请参阅