iconv-go升级过程中的编译问题

工作项目原因,需要对golang进行升级。升级之后老的iconv-go运行有问题。因为新的golang运行更加严格,所以需要升级iconv-go.

从djimenez/iconv-go 拉下来代码进行编译发现“找不到iconv库的一些接口”,目测是库没链进来。错误信息如下:

go install ./...
# github.com/djimenez/iconv-go
/tmp/go-build579267556/github.com/djimenez/iconv-go/_obj/converter.cgo2.o: In function `_cgo_5f3e10abf205_Cfunc_iconv_open‘:
src/github.com/djimenez/iconv-go/converter.go:142: undefined reference to `libiconv_open‘
/tmp/go-build579267556/github.com/djimenez/iconv-go/_obj/converter.cgo2.o: In function `_cgo_5f3e10abf205_Cfunc_iconv_close‘:
src/github.com/djimenez/iconv-go/converter.go:128: undefined reference to `libiconv_close‘
/tmp/go-build579267556/github.com/djimenez/iconv-go/_obj/converter.cgo2.o: In function `_cgo_5f3e10abf205_C2func_iconv_open‘:
src/github.com/djimenez/iconv-go/converter.go:87: undefined reference to `libiconv_open‘
/tmp/go-build579267556/github.com/djimenez/iconv-go/_obj/converter.cgo2.o: In function `_cgo_5f3e10abf205_C2func_iconv_close‘:
src/github.com/djimenez/iconv-go/converter.go:71: undefined reference to `libiconv_close‘
/tmp/go-build579267556/github.com/djimenez/iconv-go/_obj/converter.cgo2.o: In function `call_iconv‘:
src/github.com/djimenez/iconv-go/converter.go:13: undefined reference to `libiconv‘
collect2: ld returned 1 exit status

很奇怪,本地明明有安装iconv,怎么就找不到iconv库?

iconv --version
iconv (GNU libiconv 1.14)
Copyright (C) 2000-2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Bruno Haible.

进到iconv-go的converter.go发现

package iconv

/*
#cgo darwin LDFLAGS: -liconv
#cgo freebsd LDFLAGS: -liconv
#cgo windows LDFLAGS: -liconv
#include <stdlib.h>
#include <iconv.h>

// As of GO 1.6 passing a pointer to Go pointer, will lead to panic
// Therofore we use this wrapper function, to avoid passing **char directly from go
size_t call_iconv(iconv_t ctx, char *in, size_t *size_in, char *out, size_t *size_out){
        return iconv(ctx, &in, size_in, &out, size_out);
}

*/

我了个去,darwin,freebsd,windows都有。但是我在centos下使用的。难不成是这个原因,导致iconv库没有链进去?于是尝试进行了修改。

package iconv

/*
#cgo darwin LDFLAGS: -liconv
#cgo freebsd LDFLAGS: -liconv
#cgo windows LDFLAGS: -liconv
#cgo LDFLAGS: -liconv
#include <stdlib.h>
#include <iconv.h>

// As of GO 1.6 passing a pointer to Go pointer, will lead to panic
// Therofore we use this wrapper function, to avoid passing **char directly from go
size_t call_iconv(iconv_t ctx, char *in, size_t *size_in, char *out, size_t *size_out){
        return iconv(ctx, &in, size_in, &out, size_out);
}

*/

再进行编译。奇迹般的通过了,通过了,通过了。。。

好吧,目前只是这样猥琐的解决的。这样写不知道会不会对跨平台造成影响。先这样解决吧。记录一下。

如果哪位同仁看到这篇文章,觉得不是这样解决的,请不吝赐教。

时间: 2024-11-08 06:09:17

iconv-go升级过程中的编译问题的相关文章

WDCP从php5.2升级到5.3的办法,以及升级过程中iconv错误的处理

从wdcp官方论坛我们可以找到一个询问升级的帖子,然后管理员在回复中也提供了升级方法: cd /tmp wget -c http://dl.wdlinux.cn:5180/soft/php-5.3.10.tar.gz tar zxvf php-5.3.10.tar.gz cd php-5.3.10 ./configure --prefix=/www/wdlinux/php-5.3.10 --with-config-file-path=/www/wdlinux/etc --with-mysql=/

Unity5.x 项目升级过程中常见问题解决方案总结

最近整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享. 1:Unity4.x 项目中3D模型其材质丢失,成为"白模"?      解决方案:手工重新赋值材质贴图. 2:Unity4.x 项目中的NavMesh 升级报错?     "NavMesh asset format has changed. Please rebake the NavMesh data." ?     解决方案:按照字面含义,重新对静态物体进行烘焙即可. 3

在win10升级过程中卡死救命办法

acer aspire 4750g在win10升级过程中卡死,又无法进入BIOS的情况下,我们可以通过盲刷BIOS的方法进入,方法如下: 准备一个U盘,将其格式化成FAT32格式(但不要制作启动引导盘) 下载对应机型的BIOS文件,用WinRAR解压,把其中有类似xxx.rom和xxx.fd的两个文件(有的是XXX.ROM和XXX.WPH), 复制到U盘根目录 取下笔记本电池,将U盘插入笔记本,插入电源适配器,同时按住Fn+Esc两个按键开机,注意开机时要按住两个按键,通电后再松开.这时笔记本会

通过 yum update 将系统从CentOS 6.2 升级到 CentOS 6.6 及升级过程中的简单排错

本文说明 本文写于2014年的WP中,后WP停止维护,今天翻到此记录整理下,记录于此,方便日后查看. 话说那时候写博客真是认真啊~哈哈~ 升级前的系统信息 [[email protected] ~]# uname -a Linux thatsit 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux [[email protected] ~]# uname -r 2.6.32

Confluence 6 在升级过程中查看合并日志

为了监控升级的过程,你应该查看 application log 日志中的输出. 通常日志经常将会显示多个日志实例,这个实例是定义在日志的 INFO 级别的,通常格式如下: WikiToXhtmlMigrationThread-n - Migrated 2500 of 158432 pages, this batch migrated 500/500 without error 针对每一个独立的页面,可能会显示很多日志的消息,但是任何错误将会显示一个独立合并日志,一旦所有的内容都被处理完成后.下面

webpack 1.x升级过程中的踩坑总结大全

错误:Error: Chunk.entry was removed. Use hasRuntime() 卸载npm uninstall extract-text-webpack-plugin --save-dev 重新下载 npm install [email protected]^2.0.0-beta.4 错误:Error: Breaking change: extract now only takes a single argument. 原因是webpack2对loader的配置做了一些调

iOS 9 升级过程汇中白苹果 iPhone或iPad 解决方案

最近想必有很多朋友升级了iOS 9,不过有部分朋友在升级过程中遇到了白苹果问题.也就是卡在升级过程中,不限重启.这时,你只能通过dfu进行升级了. ios9怎么进入dfu模式: 1.将你的iPhone关机. 2.同时按住开关机键和Home键. 3.当你看见白色的苹果Logo时,请松开开关机键,并继续保持按住Home键. 4.开启iTunes,等待其提示你进入恢复模式后,即可按住键盘上的Shift键,点击"恢复",选择相应的固件进行恢复.

【Unity】近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享。

近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享. 1:Unity4.x 项目中3D模型其材质丢失,成为"白模"? 解决方式:手工又一次赋值材质贴图. 2:Unity4.x 项目中的NavMesh 升级报错? "NavMesh asset format has changed. Please rebake the NavMesh data." ? 解决方式:依照字面含义,又一次对静态物体进行烘焙就可以. 3:Unity4.x

Linux下安装过程中编译PHP时报错:configure: error: libjpeg.(a|so) not found

在Linux下安装PHP过程中,编译时出现configure: error: libjpeg.(a|so) not found 错误的解决的方法: 检查之后发现已经安装libjpeg.可是/usr/lib文件夹下没有libjpeg.so这个文件,在/usr/lib64下是有的,使用–with-jpeg-dir=/usr/lib64 依旧无效, 最后用ln -s /usr/lib64/libjpeg.so /usr/lib/libjpeg.so问题解决 libpng报错解决方法一样