一个小的filezilla client编译错误,跟字符编码相关

【引子】


在suse linux系统下部署好filezilla client源代码编译环境,filezilla版本为filezilla-3.7.1,但是编译的时候报错。


【错误】


g++ -DHAVE_CONFIG_H -I. -I../../../src/engine -I../../src/include -I../../../src/engine/../include -I/usr/local/include   -I/usr/local/lib/wx/include/gtk2-ansi-release-2.8 -I/usr/local/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -fpch-preprocess  -g -O2 -Wall -g -fexceptions -std=gnu++0x -MT libengine_a-serverpath.o -MD -MP -MF .deps/libengine_a-serverpath.Tpo -c -o libengine_a-serverpath.o `test -f 'serverpath.cpp' || echo '../../../src/engine/'`serverpath.cpp
../../../src/engine/serverpath.cpp: In member function ‘wxString CServerPath::GetSafePath() const’:
../../../src/engine/serverpath.cpp:289: error: cannot convert ‘wxChar*’ to ‘wchar_t*’ for argument ‘1’ to ‘wchar_t* wcscpy(wchar_t*, const wchar_t*)’
../../../src/engine/serverpath.cpp:298: error: cannot convert ‘wxChar*’ to ‘wchar_t*’ for argument ‘1’ to ‘wchar_t* wcscpy(wchar_t*, const wchar_t*)’

【分析】

 

上面的错误信息表明文件serverpath.cpp中函数wcscpy()的第一个传递参数跟形参类型不一样。

一个是 ‘wxChar*’,一个是‘wchar_t*’。

通过查看代码serverpath.cpp,发现函数wcscpy替换了宏tstrcpy。

宏tstrcpy的定义在serverpath.cpp文件的第258到262行。如下代码片段所示:

#ifdef wxUSE_UNICODE
#define tstrcpy wcscpy
#else
#define tstrcpy strcpy
#endif


上面代码说明了编译filezilla需要用Unicode构建的wxWidgets。

从上面错误信息中看到-I/usr/local/lib/wx/include/gtk2-ansi-release-2.8,得知原先安装的wxWidgets是ansi构建的wxWidgets。

原先安装wxWidgets方式

>../configure --with-gtk
>vim config.log
-----------------------------------------------------------------------
4021 wx_cv_use_treebook=wxUSE_TREEBOOK=yes
4022 wx_cv_use_treectrl=wxUSE_TREECTRL=yes
4023 wx_cv_use_unicode=wxUSE_UNICODE=no
4024 wx_cv_use_universal=wxUSE_UNIVERSAL=no
4025 wx_cv_use_universal_binary=wxUSE_UNIVERSAL_BINARY=no
-----------------------------------------------------------------------

看到默认安装wxWidgets时不是Unicode构建。

 

【解决方案】

1、卸载原先的wxWidgets.

>make uninstall

2、用Unicode的方式安装wxWidgets.

> ../configure --with-gtk --enable-unicode --enable-printfposparam
>vim config.log
-----------------------------------------------------------------------
4593 wx_cv_use_treebook=wxUSE_TREEBOOK=yes
4594 wx_cv_use_treectrl=wxUSE_TREECTRL=yes
4595 wx_cv_use_unicode=wxUSE_UNICODE=yes
4596 wx_cv_use_universal=wxUSE_UNIVERSAL=no
4597 wx_cv_use_universal_binary=wxUSE_UNIVERSAL_BINARY=no
-----------------------------------------------------------------------

>make

>make install

3、重新安装filezilla

安装成功。

4、运行filezilla

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值