aira2折腾手记
https://blog.csdn.net/xiaoNature/article/details/124720823
pacman -S base-devel
pacman -S development
pacman -S libraries
pacman -S libtool
pacman -S autoconf-wrapper
pacman -S automake-wrapper
pacman -S mingw-w64-x86_64-gettext
pacman -S mingw-w64-x86_64-toolchain
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
gettext-devel autoconf automake libtool
pacman -S mingw-w64-i686-toolchain
pacman -S mingw-w64-x86_64-gcc
i686 x32位工具
x86_64 x64位工具
https://packages.msys2.org/group/mingw-w64-i686-toolchain
https://packages.msys2.org/group/mingw-w64-x86_64-toolchain
https://packages.msys2.org/group/libraries
https://packages.msys2.org/group/development
make clean #清除上一次make命令生成的文件
make distclean #清除上一次make以及configure命令生成的文件




更新 下载 Win下面模拟 Linux的 开发工具,安装autoreconf 工具:
https://www.devdungeon.com/content/install-gcc-compiler-windows-msys2-cc
pacman -S cmake clangdevelopment gmpbinutils
pacman -Syu
pacman -S --needed base-devel mingw-w64-x86_64-toolchain make gettext-devel autoconf automake m4 libtool perl mingw-w64-x86_64-crypto++ gcc


https://packages.msys2.org/package/mingw-w64-clang-x86_64-expat?repo=clang64
cd到 C:\aria2gitmast\sourcecode,其中 C盘盘符改为 /c/:则命令为 cd /c/aria2gitmast/sourcecode
执行 autoreconf -i 生成Makefile文件
Setp2:依赖库安装 :https://packages.msys2.org/queue
pacman -S mingw-w64-x86_64-c-ares mingw-w64-x86_64-expat mingw-w64-x86_64-sqlite3 mingw-w64-x86_64-zlib mingw-w64-x86_64-libssh2 mingw-w64-x86_64-cppunit
- c-ares // https://github.com/c-ares/c-ares
- expat //https://github.com/libexpat/libexpat
- sqlite3 //https://www.sqlite.org/download.html
- zlib //https://github.com/madler/zlib
- libssh2 //https://github.com/libssh2/libssh2
- cppunit //https://www.freedesktop.org/wiki/Software/cppunit/
-
pacman -S mingw-w64-x86_64-c-ares
-
pacman -S mingw-w64-x86_64-expat
-
pacman -S mingw-w64-x86_64-sqlite3
-
pacman -S mingw-w64-x86_64-zlib
-
pacman -S mingw-w64-x86_64-libssh2
-
pacman -S mingw-w64-x86_64-cppunit
想手动编译依赖库的参考:https://zhuanlan.zhihu.com/p/395045239
全部安装成功后:*此处为动态库的版本,所以需要修改mingw-config文件,将文件中的“ARIA2_STATIC=yes \”替换为“--enable-libaria2 \”即可。


Setp3:编译,生成Makefile
HOST=x86_64-w64-mingw32
PREFIX=/mingw64
./mingw-config > config-my.log
编译(静态库)
*此版本生成的src文件夹下的Makefile有个bug,会导致g++连接时会报cares库中的某些依赖函数无法找到的错误,所以需要调整此Makefile的连接库顺序,将“-L/mingw64/lib -lcares \”移动到第一个即可。

修改后即可执行make命令编译(时间非常长,需耐心等待)
make V=1 > make-my.log
编译成功后,即可在src目录下,生成aria2c.exe文件

验证编译成果物
cmd进入到src目录,执行验证命令
aria2c.exe https://speedxbu.baidu.com/shurufa/ime/setup/BaiduPinyinSetup_5.8.4.8.exe

执行成功后,百度输入安装包被成功下载

至此aria2的静态库版本编译和验证成功。
4、官方命令行编译(动态库版本)
启动MSYS2 MinGW x64 环境进行命令行编译 只能是 64

生成配置脚本
按github的Readme说明,首先执行生成配置的命令(时间较长,需耐心等待)
autoreconf -i
执行成功后,即可生成配置脚本configure和其他一些必要文件

生成Makefile
按照官方说明在windows上生成Makefile,需要执行mingw-config脚本
![]()
但是执行mingw-config脚本官方描述说需要如下库的支持

-
pacman -S mingw-w64-x86_64-c-ares
-
pacman -S mingw-w64-x86_64-expat
-
pacman -S mingw-w64-x86_64-sqlite3
-
pacman -S mingw-w64-x86_64-zlib
-
pacman -S mingw-w64-x86_64-libssh2
-
pacman -S mingw-w64-x86_64-cppunit
全部安装成功后
*此处为动态库的版本,所以需要修改mingw-config文件,将文件中的“ARIA2_STATIC=yes \”替换为“--enable-libaria2 \”即可。

执行生成Makefile的命令(时间很长,需耐心等待)
HOST=x86_64-w64-mingw32 PREFIX=/mingw64 ./mingw-config > config-my.log执行成功后,即可生成Makefile和其他必要文件

编译(动态库)
执行make命令编译(时间非常长,需耐心等待)
make V=1 > make-my.log编译成功后,即可在src\.libs目录下,生成libaria2-0.dll和aria2c.exe文件
验证编译成果物
动态库版本需要所有的依赖库都拷贝到exe目录,才能运行,所以将如下dll从msys64\mingw64\bin拷贝到src\.libs目录中

cmd进入到src\.libs目录,执行验证命令
aria2c.exe https://speedxbu.baidu.com/shurufa/ime/setup/BaiduPinyinSetup_5.8.4.8.exe
执行成功后,百度输入安装包被成功下载

至此aria2的动态库版本编译和验证成功。
5、搭建eclipse环境编译及调试
下载目前最新的eclipse的c++版本,版本号为eclipse-cpp-2022-03-R-win32-x86_64
*为了方便使用eclipse编译,需要使用前两章“生成Makefile”步骤生成的config.h文件

启动eclipse.exe(创建工程时使用MinGW GCC的编译工具链)

创建并编译wslay工程
该工程为静态库

添加g++宏定义

添加gcc宏定义

-
DEL_HAVE_CONFIG_H
-
DLL_EXPORT
-
PIC
-
WSLAY_VERSION=1.1.1
添加g++头文件包含路径

添加gcc头文件包含路径

-
"D:\opensource\aria2-release-1.36.0-eclipse\deps\wslay\lib"
-
"D:\opensource\aria2-release-1.36.0-eclipse\deps\wslay"
-
"D:\opensource\aria2-release-1.36.0-eclipse\deps\wslay\lib\includes"
-
"D:\opensource\msys64\mingw64\include"
在工程中创建src文件夹,以链接的方式导入aria2中的代码文件


-
wslay_event.c
-
wslay_frame.c
-
wslay_net.c
-
wslay_queue.c
-
wslay_stack.c
编译Debug和Release两个配置,生成两个版本的libwslay.a文件

创建并编译aria2工程
该工程为静态库和动态库两套配置,需要额外创建Debug-dynamic和Releas-dynamic两个配置


添加静态库和动态库g++宏定义

添加静态库和动态库gcc宏定义

-
HAVE_CONFIG_H
-
LOCALEDIR=D:\opensource\msys64\mingw64\share\locale
-
_POSIX_C_SOURCE=1
-
CARES_STATICLIB
-
WSLAY_VERSION=1.1.1
添加静态库和动态库g++头文件包含路径

添加静态库和动态库gcc头文件包含路径

-
"D:\opensource\aria2-release-1.36.0-eclipse\src"
-
"D:\opensource\aria2-release-1.36.0-eclipse"
-
"D:\opensource\aria2-release-1.36.0-eclipse\lib"
-
"D:\opensource\aria2-release-1.36.0-eclipse\intl"
-
"D:\opensource\aria2-release-1.36.0-eclipse\src\includes"
-
"D:\opensource\msys64\mingw64\include"
-
"D:\opensource\aria2-release-1.36.0-eclipse\deps\wslay\lib\includes"
添加动态库连接库文件和包含路径

-
-
cares
-
wsock32
-
winmm
-
iphlpapi
-
psapi
-
expat
-
sqlite3
-
secur32
-
advapi32
-
gmp
-
ssh2
-
ssl
-
crypto
-
gdi32
-
crypt32
-
z
-
wslay
-
ws2_32
-
"D:\opensource\msys64\mingw64\lib"
-
"${workspace_loc:/wslay/Debug}"
在工程中创建src文件夹,以链接的方式导入aria2中的代码文件


-
a2gmp.cc
-
A2STR.cc
-
AbstractAuthResolver.cc
-
AbstractBtMessage.cc
-
AbstractCommand.cc
-
AbstractDiskWriter.cc
-
AbstractHttpServerResponseCommand.cc
-
AbstractOptionHandler.cc
-
AbstractProxyRequestCommand.cc
-
AbstractProxyResponseCommand.cc
-
AbstractSingleDiskAdaptor.cc
-
ActivePeerConnectionCommand.cc
-
AdaptiveFileAllocationIterator.cc
-
AdaptiveURISelector.cc
-
Adler32MessageDigestImpl.cc
-
AnnounceList.cc
-
AnnounceTier.cc
-
AsyncNameResolver.cc
-
AsyncNameResolverMan.cc
-
AuthConfig.cc
-
AuthConfigFactory.cc
-
AutoSaveCommand.cc
-
BackupIPv4ConnectCommand.cc
-
base32.cc
-
bencode2.cc
-
BencodeParser.cc
-
bitfield.cc
-
BitfieldMan.cc
-
bittorrent_helper.cc
-
BtAbortOutstandingRequestEvent.cc
-
BtAllowedFastMessage.cc
-
BtAnnounce.cc
-
BtBitfieldMessage.cc
-
BtBitfieldMessageValidator.cc
-
BtCancelMessage.cc
-
BtCheckIntegrityEntry.cc
-
BtChokeMessage.cc
-
BtDependency.cc
-
BtExtendedMessage.cc
-
BtFileAllocationEntry.cc
-
BtHandshakeMessage.cc
-
BtHandshakeMessageValidator.cc
-
BtHaveAllMessage.cc
-
BtHaveMessage.cc
-
BtHaveNoneMessage.cc
-
BtInterestedMessage.cc
-
BtKeepAliveMessage.cc
-
BtLeecherStateChoke.cc
-
BtNotInterestedMessage.cc
-
BtPieceMessage.cc
-
BtPieceMessageValidator.cc
-
BtPortMessage.cc
-
BtPostDownloadHandler.cc
-
BtRegistry.cc
-
BtRejectMessage.cc
-
BtRequestMessage.cc
-
BtRuntime.cc
-
BtSeederStateChoke.cc
-
BtSetup.cc
-
BtStopDownloadCommand.cc
-
BtSuggestPieceMessage.cc
-
BtUnchokeMessage.cc
-
BufferedFile.cc
-
ByteArrayDiskWriter.cc
-
CheckIntegrityCommand.cc
-
CheckIntegrityDispatcherCommand.cc
-
CheckIntegrityEntry.cc
-
Checksum.cc
-
ChecksumCheckIntegrityEntry.cc
-
ChunkChecksum.cc
-
ChunkedDecodingStreamFilter.cc
-
ColorizedStream.cc
-
Command.cc
-
ConnectCommand.cc
-
console.cc
-
ConsoleStatCalc.cc
-
ContentTypeRequestGroupCriteria.cc
-
Context.cc
-
ContextAttribute.cc
-
cookie_helper.cc
-
Cookie.cc
-
CookieStorage.cc
-
CreateRequestCommand.cc
-
crypto_hash.cc
-
CUIDCounter.cc
-
daemon.cc
-
DefaultAuthResolver.cc
-
DefaultBtAnnounce.cc
-
DefaultBtInteractive.cc
-
DefaultBtMessageDispatcher.cc
-
DefaultBtMessageFactory.cc
-
DefaultBtMessageReceiver.cc
-
DefaultBtProgressInfoFile.cc
-
DefaultBtRequestFactory.cc
-
DefaultDiskWriter.cc
-
DefaultDiskWriterFactory.cc
-
DefaultExtensionMessageFactory.cc
-
DefaultPeerStorage.cc
-
DefaultPieceStorage.cc
-
DefaultStreamPieceSelector.cc
-
DHTAbstractMessage.cc
-
DHTAbstractTask.cc
-
DHTAnnouncePeerMessage.cc
-
DHTAnnouncePeerReplyMessage.cc
-
DHTAutoSaveCommand.cc
-
DHTBucket.cc
-
DHTBucketRefreshCommand.cc
-
DHTBucketRefreshTask.cc
-
DHTBucketTree.cc
-
DHTConnectionImpl.cc
-
DHTEntryPointNameResolveCommand.cc
-
DHTFindNodeMessage.cc
-
DHTFindNodeReplyMessage.cc
-
DHTGetPeersCommand.cc
-
DHTGetPeersMessage.cc
-
DHTGetPeersReplyMessage.cc
-
DHTInteractionCommand.cc
-
DHTMessage.cc
-
DHTMessageDispatcherImpl.cc
-
DHTMessageEntry.cc
-
DHTMessageFactoryImpl.cc
-
DHTMessageReceiver.cc
-
DHTMessageTracker.cc
-
DHTMessageTrackerEntry.cc
-
DHTNode.cc
-
DHTNodeLookupEntry.cc
-
DHTNodeLookupTask.cc
-
DHTNodeLookupTaskCallback.cc
-
DHTPeerAnnounceCommand.cc
-
DHTPeerAnnounceEntry.cc
-
DHTPeerAnnounceStorage.cc
-
DHTPeerLookupTask.cc
-
DHTPeerLookupTaskCallback.cc
-
DHTPingMessage.cc
-
DHTPingReplyMessage.cc
-
DHTPingTask.cc
-
DHTQueryMessage.cc
-
DHTRegistry.cc
-
DHTReplaceNodeTask.cc
-
DHTResponseMessage.cc
-
DHTRoutingTable.cc
-
DHTRoutingTableDeserializer.cc
-
DHTRoutingTableSerializer.cc
-
DHTSetup.cc
-
DHTTaskExecutor.cc
-
DHTTaskFactoryImpl.cc
-
DHTTaskQueueImpl.cc
-
DHTTokenTracker.cc
-
DHTTokenUpdateCommand.cc
-
DHTUnknownMessage.cc
-
DirectDiskAdaptor.cc
-
DiskAdaptor.cc
-
DlAbortEx.cc
-
DlRetryEx.cc
-
DNSCache.cc
-
download_handlers.cc
-
download_helper.cc
-
DownloadCommand.cc
-
DownloadContext.cc
-
DownloadEngine.cc
-
DownloadEngineFactory.cc
-
DownloadFailureException.cc
-
DownloadHandler.cc
-
DownloadHandlerConstants.cc
-
DownloadResult.cc
-
EvictSocketPoolCommand.cc
-
Exception.cc
-
ExpatXmlParser.cc
-
ExtensionMessageRegistry.cc
-
FallocFileAllocationIterator.cc
-
FatalException.cc
-
FeatureConfig.cc
-
FeedbackURISelector.cc
-
File.cc
-
FileAllocationCommand.cc
-
FileAllocationDispatcherCommand.cc
-
FileAllocationEntry.cc
-
FileEntry.cc
-
FillRequestGroupCommand.cc
-
fmt.cc
-
FtpConnection.cc
-
FtpDownloadCommand.cc
-
FtpFinishDownloadCommand.cc
-
FtpInitiateConnectionCommand.cc
-
FtpNegotiationCommand.cc
-
FtpTunnelRequestCommand.cc
-
FtpTunnelResponseCommand.cc
-
gai_strerror.c
-
GeomStreamPieceSelector.cc
-
GroupId.cc
-
GrowSegment.cc
-
GZipDecodingStreamFilter.cc
-
GZipEncoder.cc
-
GZipFile.cc
-
HandshakeExtensionMessage.cc
-
HaveEraseCommand.cc
-
help_tags.cc
-
HttpConnection.cc
-
HttpDownloadCommand.cc
-
HttpHeader.cc
-
HttpHeaderProcessor.cc
-
HttpInitiateConnectionCommand.cc
-
HttpListenCommand.cc
-
HttpProxyRequestCommand.cc
-
HttpProxyResponseCommand.cc
-
HttpRequest.cc
-
HttpRequestCommand.cc
-
HttpResponse.cc
-
HttpResponseCommand.cc
-
HttpServer.cc
-
HttpServerBodyCommand.cc
-
HttpServerCommand.cc
-
HttpServerResponseCommand.cc
-
HttpSkipResponseCommand.cc
-
IndexBtMessage.cc
-
IndexBtMessageValidator.cc
-
InitiateConnectionCommand.cc
-
InitiateConnectionCommandFactory.cc
-
InitiatorMSEHandshakeCommand.cc
-
InorderStreamPieceSelector.cc
-
InorderURISelector.cc
-
InternalARC4Encryptor.cc
-
InternalMessageDigestImpl.cc
-
IOFile.cc
-
IteratableChecksumValidator.cc
-
IteratableChunkChecksumValidator.cc
-
json.cc
-
JsonParser.cc
-
LibgmpDHKeyExchange.cc
-
LogFactory.cc
-
Logger.cc
-
LongestSequencePieceSelector.cc
-
LpdDispatchMessageCommand.cc
-
LpdMessage.cc
-
LpdMessageDispatcher.cc
-
LpdMessageReceiver.cc
-
LpdReceiveMessageCommand.cc
-
magnet.cc
-
message_digest_helper.cc
-
MessageDigest.cc
-
MetadataInfo.cc
-
metalink_helper.cc
-
Metalink2RequestGroup.cc
-
MetalinkEntry.cc
-
Metalinker.cc
-
MetalinkHttpEntry.cc
-
MetalinkMetaurl.cc
-
MetalinkParserController.cc
-
MetalinkParserState.cc
-
MetalinkParserStateImpl.cc
-
MetalinkParserStateMachine.cc
-
MetalinkParserStateV3Impl.cc
-
MetalinkParserStateV4Impl.cc
-
MetalinkPostDownloadHandler.cc
-
MetalinkResource.cc
-
MSEHandshake.cc
-
MultiDiskAdaptor.cc
-
MultiFileAllocationIterator.cc
-
MultiUrlRequestInfo.cc
-
NameResolveCommand.cc
-
NameResolver.cc
-
Netrc.cc
-
NetrcAuthResolver.cc
-
NetStat.cc
-
Notifier.cc
-
NsCookieParser.cc
-
NullSinkStreamFilter.cc
-
OpenedFileCounter.cc
-
option_processing.cc
-
Option.cc
-
OptionHandler.cc
-
OptionHandlerException.cc
-
OptionHandlerFactory.cc
-
OptionHandlerImpl.cc
-
OptionParser.cc
-
paramed_string.cc
-
Peer.cc
-
PeerAbstractCommand.cc
-
PeerAddrEntry.cc
-
PeerChokeCommand.cc
-
PeerConnection.cc
-
PeerInitiateConnectionCommand.cc
-
PeerInteractionCommand.cc
-
PeerListenCommand.cc
-
PeerReceiveHandshakeCommand.cc
-
PeerSessionResource.cc
-
PeerStat.cc
-
Piece.cc
-
PiecedSegment.cc
-
PieceHashCheckIntegrityEntry.cc
-
PieceStatMan.cc
-
Platform.cc
-
prefs.cc
-
PriorityPieceSelector.cc
-
ProtocolDetector.cc
-
RandomStreamPieceSelector.cc
-
Range.cc
-
RangeBtMessage.cc
-
RangeBtMessageValidator.cc
-
RarestPieceSelector.cc
-
RealtimeCommand.cc
-
ReceiverMSEHandshakeCommand.cc
-
RecoverableException.cc
-
Request.cc
-
RequestGroup.cc
-
RequestGroupEntry.cc
-
RequestGroupMan.cc
-
RequestSlot.cc
-
rpc_helper.cc
-
RpcMethod.cc
-
RpcMethodFactory.cc
-
RpcMethodImpl.cc
-
RpcRequest.cc
-
RpcResponse.cc
-
SaveSessionCommand.cc
-
SeedCheckCommand.cc
-
SegmentMan.cc
-
SelectEventPoll.cc
-
ServerStat.cc
-
ServerStatMan.cc
-
SessionSerializer.cc
-
SftpDownloadCommand.cc
-
SftpFinishDownloadCommand.cc
-
SftpNegotiationCommand.cc
-
SHA1IOFile.cc
-
ShareRatioSeedCriteria.cc
-
Signature.cc
-
SimpleBtMessage.cc
-
SimpleRandomizer.cc
-
SingleFileAllocationIterator.cc
-
SinkStreamFilter.cc
-
SocketBuffer.cc
-
SocketCore.cc
-
SocketRecvBuffer.cc
-
SpeedCalc.cc
-
Sqlite3CookieParser.cc
-
Sqlite3CookieParserImpl.cc
-
SSHSession.cc
-
StreamCheckIntegrityEntry.cc
-
StreamFileAllocationEntry.cc
-
StreamFilter.cc
-
strptime.c
-
TimeA2.cc
-
TimeBasedCommand.cc
-
TimedHaltCommand.cc
-
timegm.c
-
TimerA2.cc
-
TimeSeedCriteria.cc
-
TorrentAttribute.cc
-
TrackerWatcherCommand.cc
-
TransferStat.cc
-
TruncFileAllocationIterator.cc
-
UDPTrackerClient.cc
-
UDPTrackerRequest.cc
-
UnionSeedCriteria.cc
-
UnknownLengthPieceStorage.cc
-
UnknownOptionException.cc
-
uri_split.c
-
uri.cc
-
UriListParser.cc
-
URIResult.cc
-
util_security.cc
-
util.cc
-
UTMetadataDataExtensionMessage.cc
-
UTMetadataExtensionMessage.cc
-
UTMetadataPostDownloadHandler.cc
-
UTMetadataRejectExtensionMessage.cc
-
UTMetadataRequestExtensionMessage.cc
-
UTMetadataRequestFactory.cc
-
UTMetadataRequestTracker.cc
-
UTPexExtensionMessage.cc
-
ValueBase.cc
-
ValueBaseStructParserStateImpl.cc
-
ValueBaseStructParserStateMachine.cc
-
version_usage.cc
-
wallclock.cc
-
WatchProcessCommand.cc
-
WebSocketInteractionCommand.cc
-
WebSocketResponseCommand.cc
-
WebSocketSession.cc
-
WebSocketSessionMan.cc
-
WinConsoleFile.cc
-
WinTLSContext.cc
-
WinTLSSession.cc
-
WrDiskCache.cc
-
WrDiskCacheEntry.cc
-
XmlAttr.cc
-
XmlParser.cc
-
XmlRpcDiskWriter.cc
-
XmlRpcRequestParserController.cc
-
XmlRpcRequestParserStateImpl.cc
-
XmlRpcRequestParserStateMachine.cc
-
ZeroBtMessage.cc
编译Debug、Release、Debug-dynamic、Release-dynamic四个配置,生成两个版本的libaria2.a文件、两个版本的libaria2.dll文件

创建并编译aria2c工程
该工程为静态库和动态库两套配置,需要额外创建Debug-dynamic和Releas-dynamic两个配置

添加静态库和动态库g++宏定义

添加静态库和动态库gcc宏定义

-
HAVE_CONFIG_H
-
LOCALEDIR=D:\opensource\msys64\mingw64\share\locale
-
_POSIX_C_SOURCE=1
-
CARES_STATICLIB
-
WSLAY_VERSION=1.1.1
添加静态库和动态库g++头文件包含路径

添加静态库和动态库gcc头文件包含路径

-
"D:\opensource\aria2-release-1.36.0-eclipse\src"
-
"D:\opensource\aria2-release-1.36.0-eclipse"
-
"D:\opensource\aria2-release-1.36.0-eclipse\lib"
-
"D:\opensource\aria2-release-1.36.0-eclipse\intl"
-
"D:\opensource\aria2-release-1.36.0-eclipse\src\includes"
-
"D:\opensource\msys64\mingw64\include"
-
"D:\opensource\aria2-release-1.36.0-eclipse\deps\wslay\lib\includes"
添加静态库连接库文件和包含路径

-
aria2
-
cares
-
wsock32
-
winmm
-
iphlpapi
-
psapi
-
expat
-
sqlite3
-
secur32
-
advapi32
-
gmp
-
ssh2
-
ssl
-
crypto
-
gdi32
-
crypt32
-
z
-
wslay
-
ws2_32
-
"D:\opensource\msys64\mingw64\lib"
-
"${workspace_loc:/wslay/Debug}"
-
"${workspace_loc:/aria2/Debug}"
添加静态库连接选项

-static
添加动态库连接库文件和包含路径

aria2
"${workspace_loc:/aria2/Debug-dynamic}"
在工程中创建src文件夹,以链接的方式导入aria2中的代码文件

main.cc
编译Debug、Release、Debug-dynamic、Release-dynamic四个配置,生成四个版本的aria2c.exe文件

调试aria2c.exe验证编译成果物
配置静态库调试配置
添加aria2c调试配置,并添加启动参数

配置动态库调试配置
添加aria2c调试配置,并添加启动参数
https://speedxbu.baidu.com/shurufa/ime/setup/BaiduPinyinSetup_5.8.4.8.exe
https://speedxbu.baidu.com/shurufa/ime/setup/BaiduPinyinSetup_5.8.4.8.exe
将如下dll从msys64\mingw64\bin拷贝到aria2c\Debug-dynamic目录中

调试并验证
Debug启动aria2c的调试

静态库log

动态库log

调试执行成功后,百度输入安装包被成功下载

在main函数打断点,调试可以正确在断点处,触发中断进入调试

至此,windows下编译aria2,并搭建eclipse编译调试环境的文章编写完成。
接下来就开始研究aria2的磁力下载和DHT的源码,看看有没有可能实现点对点聊天软件的可能。
https://stackoverflow.com/questions/62771642/bash-usr-bin-autoreconf-usr-bin-perl-bad-interpreter-no-such-file-or-direc
MSYS下的automake搭建与使用
折腾了2个多小时,才把环境搞定。步骤如下:
1 下载与安装
下载如下工具或组件:autoconf,automake,m4,libtool,perl,crypt。
下载地址:http://sourceforge.net/projects/mingw/files/MSYS/
其中autoconf,automake是主要使用工具;m4,libtool是必要工具;perl是支撑工具;crypt是支撑库。libtool和crypt以库的形式下载。
下载好的文件如下:autoconf-2.67-1-msys-1.0.15-bin.tar.lzma,automake-1.11.1-1-msys-1.0.13-bin.tar.lzma,m4-1.4.14-1-msys-1.0.13-bin.tar.lzma,libltdl-2.4-1-msys-1.0.15-dll-7.tar.lzma,perl-5.6.1_2-2-msys-1.0.13-bin.tar.lzma,libcrypt-1.1_1-3-msys-1.0.13-dll-0.tar.lzma。解压后拷贝到C:\msys\1.0下,覆盖即可。
2 automake使用
1)运行autoscan命令,产生configure.scan文件;
2)将configure.scan 文件重命名为configure.in,并修改configure.in文件;
3)运行aclocal命令,产生aclocal.m4文件;
4)运行autoconf命令,产生configure文件;
5)新建Makefile.am文件,新建NEWS、 README、 ChangeLog 、AUTHORS文件;
6)修改Makefile.am,并运行automake -a命令;(automake --add-missing)
7)运行./confiugre脚本。
8)至此,Makefile已生产,然后执行make编译即可。
其中configure.in的修改,Makefile.am的修改。可参考其他网上资料。
参考:
http://www.ibm.com/developerworks/cn/linux/l-makefile/ (复杂例子)
http://tech.sina.com.cn/s/2004-10-19/1115443045.shtml (简单例子)
FAQ
1 问题:/bin/install: Permission denied
解决方法:从http://sourceforge.net/tracker/index.php?func=detail&aid=1711379&group_id=2435&atid=102435 中的"Attached files"中下载install.exe.manifest,放到MSYS的bin下。
再次出现该错误。继续:在控制面板 -- 用户账户和家庭安全 -- 用户账户中,打开更改用户账户控制设置,将级别调至最低。需要重启。至此,还未测试是否有效。
参考:http://lists-archives.org/mingw-msys/00059-problem-with-chmod.html
2 问题:执行automake -a后出现:required file './ltmain.sh' not found
解决方法:在执行aclocal和automake -a前执行libtoolize命令,来产生ltmain.sh到当前目录。
参考:http://blog.chinaunix.net/u2/84449/showart_2087602.html
3 执行automake -a,出现:Makefile.am:29: `%'-style pattern rules are a GNU make extension
解决:执行automake -Wno-portability
参考:http://bugs.mysql.com/bug.php?id=30708
tar: This does not look like a tar archive
tar: gettext-0.18: Not found in archive
liblzma-dev zlib1g-dev
在 Windows 上使用 MSYS2 for C/C++ 安装 gcc 编译器
免责声明:不要让我对此处提供的任何不良建议或不正确信息负责。使用此信息需要您自担风险。我自己几乎无法将它破解,还有一些我不是 100% 清楚的细节。
介绍
您可以在 Windows 上安装各种工具链来编译 C 和 C++ 应用程序。微软免费提供Visual Studio Community,是一个很棒的 IDE 和工具链。如果您专门为 Windows 开发,那是我推荐的工具。对于那些需要或喜欢跨平台 GNU 工具链的人,您可以使用 MSYS2 安装它。我们将介绍如何使用 MSYS2 安装 gcc。
在 Windows 中使用 gcc 的另一个选择是下载 Code::Blocks。他们提供了 Mingw 工具链附带的二进制版本。例如,http://www.codeblocks.org/downloads/。
Qt Creator 是另一个免费的 IDE,可以选择附带 mingw 工具链。查看https://www.qt.io/download和https://www.qt.io/qt-features-libraries-apis-tools-and-ide/了解更多信息。
如果您不需要专门针对 Windows,但您只是想学习和使用 GNU 工具链并且您有一台 Windows 机器,我建议您通过 Microsoft Store 在 Windows 上安装 Ubuntu 或 Suse。这将在 Windows 中提供一个 Linux 环境供您使用。或者,您可以在 VirtualBox 或 VMWare Player 虚拟机中安装 Ubuntu 等发行版。
安装和运行 MSYS2
从http://www.msys2.org/ 下载 MSYS2 。下载 .exe 文件并按照网站上的安装说明进行操作。安装后,导航到安装目录,然后运行msys2.exe。对于本教程,我们将假定默认位置为C:\msys64。打开它后,您应该会发现自己处于 bash shell 中。
更新 MSYS2
MSYS2 使用Arch Linux 发行版使用的pacman包管理器。初次安装后,最好更新所有软件包。使用以下方法更新所有内容:
pacman -Syu
使用 MSYS2 安装 gcc
在 MSYS2 bash shell 中,再次使用pacman来安装构建工具链和编译器。运行以下命令安装mingw-w64-x86_64-toolchain包组。
# Install make, autoconf, etc to C:\msys64\usr\bin
pacman -S base-devel gcc vim cmake
请注意,vim 和 cmake 是可选的,但很方便。这是与上面一起安装的软件包列表。安装这些软件包后,您将拥有 gcc 和其他可在 MSYS2 shell 中使用的工具。如果您想在命令提示符下或在 MSYS2 shell 之外使用它们,可以在 C:\msys64\usr\bin 目录中使用它们。
# pacman -S base-devel
1) asciidoc 2) autoconf 3) autoconf2.13 4) autogen 5) automake-wrapper
6) automake1.10 7) automake1.11 8) automake1.12 9) automake1.13
10) automake1.14 11) automake1.15 12) automake1.16 13) automake1.6
14) automake1.7 15) automake1.8 16) automake1.9 17) bison 18) diffstat
19) diffutils 20) dos2unix 21) file 22) flex 23) gawk 24) gdb
25) gettext 26