golang cgo编译问题与坑

golang这个语言最大的好处就是和c结合得非常好,非常方便与c互相调用。虽然其他语言也可以调用c的库,但是调用没有golang这个语言这么方便。其实想讲,golang就是现代版的c语言。

首先golang如何调用c的库,文档写得比较清楚。请参照文档cgo编译cgo命令。这个看来之后基本就大概明白了。而且讲解了一些基本的类型转换。例如string的转换等。不过真实使用的时候,会用到char**的。这个问题如何解决。stackoverflow上有解,请自行观看。

看完这些问题,大家觉得是不是就没有问题。我也是这样想的,不过真实的时候就遇到一个非常恼火的问题。就是golang对格式的一些严格要求。

问题来源,在调试cgo的程序的时候。发觉本来调试好的程序,后来也没有改什么,突然编译不了。找了很久也没有找出原因。由于是测试代码,没有放入代码管理,回滚不了。看来看去也没有看出什么问题。最后只能从最开始重新编写这个代码。最后发现是一个空行引发的血案。悲哀啊,搞了我大半天。

看下边的代码吧:

package main

/*
#cgo CFLAGS: -I .
#cgo LDFLAGS: -L . -lclibrary

#include "clibrary.h"

int callOnMeGo_cgo(int in); // Forward declaration.
*/
import "C"  //这里不能与上边注释的c代码有任何空行。

import (
        "fmt"
        "unsafe"
)

//export callOnMeGo
func callOnMeGo(in int) int {
        fmt.Printf("Go.callOnMeGo(): called with arg = %d\n", in)
        return in + 1
}

func main() {
        fmt.Printf("Go.main(): calling C function with callback to us\n")
        C.some_c_func((C.callback_fcn)(unsafe.Pointer(C.callOnMeGo_cgo)))
}

大家可以尝试在import “C”上边插入空行。你就发现会不能编译了。真是不太明白golang为什么搞怎么严格的格式检查。真的服了它了。多一个空行而已。

还有一个问题是,目前我使用cgo与ffmpeg的库进行编译,经常出现编译问题。但是重新编译多一次就成功了。也搞不懂什么原因。

澳洲之行-墨尔本、塔岛自驾游路线记录及租车感受

这次澳洲的旅游时间是2013年10月份。

今次有两程是租车的。大洋路3天,塔岛4天。选择租车公司是avis和herz。选择原因主要都是价格与之前的网友的评价服务。大家可以上http://www.vroomvroomvroom.com.au/ 这个网站进行价格对比,搜索出来的价格除保险以外的全包价格。大家对比价格的时候需要对比车价,还要对比保险价格和保险条款。好像avis没有全保,有330元的起付线,hertz有保险有全保。还有vroom显示的保险价格不太正确。大家最好去各自的官网看看,不过也是差几元钱,

还有vroom的搜索的时候需要输入live in(居住地),有些网友说选择澳洲就会便宜点。我发觉并不是绝对的。这次我的情况是这样的。
在墨尔本租车去大洋路的时候。
hertz

live in选择澳洲的时候,比选择中国是便宜的,3天的价格便宜成30-40元(同一车型同一时间duang),

Avis 就相反的。
live in 选择中国的时候巨便宜,选择澳洲反而贵。
不过在塔岛租车的时候又相反了。

hertz live in 选择中国是比选择澳洲便宜。
Avis live in 选择澳洲比选择中国便宜。

所有本人在墨尔本选择了avis,塔岛选择了hertz。有人可能说,live in选项那个便宜就选哪个,不过我担心提车的时候别人不给你提。我发觉avis的官网做booking的时候同样有live in的项目选择的。而且在官方的确认单那里也会标明你的live in是那里。hertz的官网做booking是没有live in选项的,确认单也没有标明你的live in的。hertz的如何区分呢,你可以选择hertz不同地区的网站进行搜索就会发现搜索出来的价格是不一样的。我觉得大家还是老老实实填写这个选项吧,做个诚实的孩子。另外这些价格的差异我估计不是一成不变的,有可能根据不同地区有不同的推广,而做成的差异。

另外一点需要提醒大家,大家选择车型的时候不要看官方的图片,十有八九是不对的。我租了两程车的车型都和我选择的不对的。只有size的大小是对的。而且我发觉租车公司车型非常繁杂,也没有说那个租车公司主要用那个品牌的车比较多。租车公司的停车场停着当地主流的几个品牌的车都有。所有不要参考租车公司的车辆图片。
讲讲两间租车公司的租车感受:

继续阅读“澳洲之行-墨尔本、塔岛自驾游路线记录及租车感受”