小编sha*_*zow的帖子

使用Go 1.5 buildmode = c-archive与从C链接的net/http.Server

即将发布的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)

c linker ld go gccgo

7
推荐指数
1
解决办法
1065
查看次数

我怎么才能看到vim认为我打的是什么键?

有没有办法得到类似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认为我在按什么,所以我可以相应地编写映射.

vim

6
推荐指数
1
解决办法
1714
查看次数

标签 统计

c ×1

gccgo ×1

go ×1

ld ×1

linker ×1

vim ×1