即将发布的Go 1.5版本附带了新的构建模式,允许导出Go符号从C代码链接和调用.我一直在玩它并得到基本的"Hello world"示例,但是现在我正在尝试链接一个Go库,它启动了net/http.Server它并且它失败了.代码看起来像这样(它也可以在这里获得):
gohttplib.go:
package main
import "C"
import "net/http"
//export ListenAndServe
func ListenAndServe(caddr *C.char) {
addr := C.GoString(caddr)
http.ListenAndServe(addr, nil)
}
func main() {}
Run Code Online (Sandbox Code Playgroud)
实例/ C/main.c中:
#include <stdio.h>
#include "../../gohttplib.h"
int main()
{
ListenAndServe(":8000");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
生成静态链接的对象和标头工作正常:
$ go build -buildmode=c-archive
Run Code Online (Sandbox Code Playgroud)
但是编译它是失败的:
$ gcc -o gohttp-c examples/c/main.c gohttplib.a -lpthread
Undefined symbols for architecture x86_64:
"_CFArrayGetCount", referenced from:
_FetchPEMRoots in gohttplib.a(000003.o)
"_CFArrayGetValueAtIndex", referenced from:
_FetchPEMRoots in gohttplib.a(000003.o)
"_CFDataAppendBytes", referenced from:
_FetchPEMRoots in gohttplib.a(000003.o) …Run Code Online (Sandbox Code Playgroud) 有没有办法得到类似xev的模式,我可以按键和键组合,vim将打印出它认为我按的键或字符?
具体的相关问题:我有在MacVim和GVim中工作的密钥绑定,但它们不能在终端-vim中工作,我在Linux上通过SSH在屏幕上使用它.我得出结论,原因是因为vim认为我所按的键与MacVim如何解释它们不同.
在我的.vimrc中:
map <M-,> :split<CR> " Horizontal split
map <M-.> :vsplit<CR> " Vertical split
map <M-/> :close<CR>
Run Code Online (Sandbox Code Playgroud)
在我的vim中:map(MacVim显示相同):
¯ :close<CR><Space>
® :vsplit<CR> " Vertical split
¬ :split<CR> " Horizontal split
Run Code Online (Sandbox Code Playgroud)
它适用于MacVim和GVim,但不适用于任何基于终端的vim.我在多个终端(OSX终端和Term2,KDE终端,Gnome终端等)尝试了这个.我也用其他修饰符和关键组合见证了这一点.似乎vim正在捕获击键,但它将它们解释为不是<M-,>例如.
我想知道vim认为我在按什么,所以我可以相应地编写映射.