使用 openSUSE Tumbleweed
编译 aMule-DLP 及配套的 aMule-DLP.antiLeech
aMule-DLP 已经编译安装完成
但编译 aMule -DLP.antiLeech 时发生错误
典型的错误信息有以下两种
请教以下这是怎么回事,如何解决?
以前在 Fedora 下编译是没有一切顺利没有报错的。
使用 openSUSE Tumbleweed
编译 aMule-DLP 及配套的 aMule-DLP.antiLeech
aMule-DLP 已经编译安装完成
但编译 aMule -DLP.antiLeech 时发生错误
典型的错误信息有以下两种
粗看感觉像是缺少 header 或者 gcc 版本问题,请问您的 amule-dlp.antiLeech 是怎样编译的呀?我有空在 tw 上也试试看看能不能复现您的错误。
谢谢
是的,是在 GitHub 这个项目上下载的
我在尝试了一下编译这个项目,折腾了一会能无报错编译 aMule-DLP.antiLeech 了
我所作的步骤如下:
我能在我的 tw 上复现你的错误,根据你的截图我也安装了 wxWidgets-3_0-devel,根据报错是因为找不到对应的函数,而根据 aMule-DLP 的 README 所说:wxWidgets 版本须在 2.8.0 以上。
所以我去 wxwidgets 官网 发现 3.0 版本与 2.8 版本可能是不兼容的 (这点从 下载页面 可以看出,而且 2.8 版本不提供 rpm 安装包这也是为什么 opensuse 软件源没有 2.8 的 devel 包)。
我网上找了一圈没有发现合适 wxGTK-2.8.12 的 rpm 安装包,所以只能自己编译了。
可以从 官网 下载,下载链接:https://github.com/wxWidgets/wxWidgets/releases/download/v2.8.12/wxGTK-2.8.12.tar.gz
cd ~/Downloads
wget https://github.com/wxWidgets/wxWidgets/releases/download/v2.8.12/wxGTK-2.8.12.tar.gz
GCC 版本问题
tw 目前带的 gcc 默认是 gcc9,而 aMule 开发的时候测试用的是 GCC4,所以会出现-Wnarrowing
错误
这是将 Warning 视作 Error,所以可以关闭,添加 Flag-Wno-narrowing
即可
具体命令如下
# 安装依赖
sudo zypper in -y gtk2-devel gcc gcc-c++
# 解压缩源码包
cd ~/Downloads
tar -xzf wxGTK-2.8.12.tar.gz
cd wxGTK-2.8.12
# 创建一个编译文件夹
mkdir gtkbuild && cd gtkbuild
# 编译
CXXFLAGS="-Wno-narrowing" ../configure --enable-unicode --enable-debug
make -j`nproc` # 并行编译
sudo make install
sudo ldconfig
# 测试一下
wx-config --cxxflags
# 我这的输出是 -I/usr/local/lib64/wx/include/gtk2-unicode-debug-2.8 -I/usr/local/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXDEBUG__ -D__WXGTK__ -pthread
这个我看您已经编译过了,重新编译应该就行,记得先make distclean
清理一下就好
为了完整性我就贴一下我的命令
cd ~/Downloads
wget https://github.com/persmule/amule-dlp.antiLeech/archive/v4405.tar.gz
tar -xzf v4405.tar.gz
cd amule-dlp.antiLeech-4405
./autogen.sh
../configure # 这里依旧会提示 wx/string.h 找不到但是却能编译成功
make -j`nproc`
sudo make install
我并没有安装和用过 aMule-DLP,所以不能保证真的安装成功了,但是之前的报错确实没有了。
您可以参考一下我的编译步骤,验证一下是否真正有效。
祝您身体健康
感谢大佬,我再试一下
到时候反馈结果
不过我看源里面 wxWidgets 的说明,不同版本不能共存
那就是先得卸载 3.0.4 版再安装 2.8 版吧?
我是卸载了的,不过编译安装的目录应该和 zypper 安装的不一样所以可以共存在文件系统里,你可以试试先不卸载 3.0 看看会发生啥
两个都存在是 PATH 环境变量里先找到哪个用哪个,除非 Makefile 显式指定 wxWdigets 版本。/usr/include 和 /usr/local/include。
也可以用 export CLAGS+=“-I/usr/local/include” 这样子来解决,因为这个变量会被 Makefile 读,而且它默认是空的。
还有一种办法,就是把 wxGTK 2.8 下写的 antiLeech 代码移植到 wxWidgets。熟悉 C 的话工作量不是很大。
那我来试试这个方法
不过有点奇怪
从这个帖子来看,antiLeech 和 aMule-DLP 应该是已经迁移到 wxGTK3.0 了
而且 aMule-DLP 的安装指南里
给的也是安装 3.0
恐怕是不是 openSUSE 上的 3.0.4 的包有点问题?
感觉 dlp 是可以支持 3.0 的但是 antileech 可能不行?
应该不是
以前在 Fedora 上是编译完 aMule-DLP 接着就可以把 antiLeech 编译了,不需要任何修改
这两个项目是同一个人在维护,不至于分开
请问您是用的 fedora 哪个版本呀
Fedora 31 Workstation GNOME
使用
sudo dnf build-dep amule
安装的编译依赖
好的,我去搞个 fedora31 虚拟机试试
openSUSE TW 跟 Fedora 31 的 gcc 版本不一样啊……
CString 和 wchar_t* 在开启 unicode 支持的机器上是等价的。应该就是 gcc 版本的问题。fix 也好搞,代码里 cast 一下就好了。所以我说会 C 这个问题不难
这真麻烦你了
就是不会改啊
女王说得对,我找资料的时候发现别的项目也有类似的问题 https://github.com/rdfhdt/hdt-cpp/issues/34
确实 cast 一下就不会有这个 warning,这个 warning 是 gcc 一会开成 error 一会不开 error,比如 GCC4.3 就是 warning 不视为 error 的
我装了 fedora 31 workstation 然后更新了一下,运行sudo dnf build-dep amule
会说有的软件包找不到,是不是我少添加了什么软件源呢?
BTW,fedora 现在的 gcc 是 9.2.1,和 TW 好像差的不太远的亚子
_tcsicmp (a, b) 就是提示错误那个 1402 行,要求 a 必须是 const wchat_t* 类型,userhash 是 const CString 类型。做一下安全的强制类型转换就行:
把 userhash 换成 static_cast<const whar_t*>(userhash)。
我感觉这样就可以了