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命令生成的文件

参见aria2Windows安装:

 

 

 

  Setp1: 安装MSYS2。

更新 下载 Win下面模拟 Linux的 开发工具,安装autoreconf 工具:

https://www.devdungeon.com/content/install-gcc-compiler-windows-msys2-cc

pacman -S cmake clang development gmp binutils

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/
  1. pacman -S mingw-w64-x86_64-c-ares
  2. pacman -S mingw-w64-x86_64-expat
  3. pacman -S mingw-w64-x86_64-sqlite3
  4. pacman -S mingw-w64-x86_64-zlib
  5. pacman -S mingw-w64-x86_64-libssh2
  6. 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脚本官方描述说需要如下库的支持

  1. pacman -S mingw-w64-x86_64-c-ares
  2. pacman -S mingw-w64-x86_64-expat
  3. pacman -S mingw-w64-x86_64-sqlite3
  4. pacman -S mingw-w64-x86_64-zlib
  5. pacman -S mingw-w64-x86_64-libssh2
  6. 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宏定义

     

    1. DEL_HAVE_CONFIG_H
    2. DLL_EXPORT
    3. PIC
    4. WSLAY_VERSION=1.1.1

    添加g++头文件包含路径

    添加gcc头文件包含路径

    1. "D:\opensource\aria2-release-1.36.0-eclipse\deps\wslay\lib"
    2. "D:\opensource\aria2-release-1.36.0-eclipse\deps\wslay"
    3. "D:\opensource\aria2-release-1.36.0-eclipse\deps\wslay\lib\includes"
    4. "D:\opensource\msys64\mingw64\include"

     在工程中创建src文件夹,以链接的方式导入aria2中的代码文件

    1. wslay_event.c
    2. wslay_frame.c
    3. wslay_net.c
    4. wslay_queue.c
    5. wslay_stack.c

     编译Debug和Release两个配置,生成两个版本的libwslay.a文件

    创建并编译aria2工程

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

     

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

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

     

    1. HAVE_CONFIG_H
    2. LOCALEDIR=D:\opensource\msys64\mingw64\share\locale
    3. _POSIX_C_SOURCE=1
    4. CARES_STATICLIB
    5. WSLAY_VERSION=1.1.1

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

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

    1. "D:\opensource\aria2-release-1.36.0-eclipse\src"
    2. "D:\opensource\aria2-release-1.36.0-eclipse"
    3. "D:\opensource\aria2-release-1.36.0-eclipse\lib"
    4. "D:\opensource\aria2-release-1.36.0-eclipse\intl"
    5. "D:\opensource\aria2-release-1.36.0-eclipse\src\includes"
    6. "D:\opensource\msys64\mingw64\include"
    7. "D:\opensource\aria2-release-1.36.0-eclipse\deps\wslay\lib\includes"

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

 

  1. cares
  2. wsock32
  3. winmm
  4. iphlpapi
  5. psapi
  6. expat
  7. sqlite3
  8. secur32
  9. advapi32
  10. gmp
  11. ssh2
  12. ssl
  13. crypto
  14. gdi32
  15. crypt32
  16. z
  17. wslay
  18. ws2_32
  1. "D:\opensource\msys64\mingw64\lib"
  2. "${workspace_loc:/wslay/Debug}"

 在工程中创建src文件夹,以链接的方式导入aria2中的代码文件

 

  1. a2gmp.cc
  2. A2STR.cc
  3. AbstractAuthResolver.cc
  4. AbstractBtMessage.cc
  5. AbstractCommand.cc
  6. AbstractDiskWriter.cc
  7. AbstractHttpServerResponseCommand.cc
  8. AbstractOptionHandler.cc
  9. AbstractProxyRequestCommand.cc
  10. AbstractProxyResponseCommand.cc
  11. AbstractSingleDiskAdaptor.cc
  12. ActivePeerConnectionCommand.cc
  13. AdaptiveFileAllocationIterator.cc
  14. AdaptiveURISelector.cc
  15. Adler32MessageDigestImpl.cc
  16. AnnounceList.cc
  17. AnnounceTier.cc
  18. AsyncNameResolver.cc
  19. AsyncNameResolverMan.cc
  20. AuthConfig.cc
  21. AuthConfigFactory.cc
  22. AutoSaveCommand.cc
  23. BackupIPv4ConnectCommand.cc
  24. base32.cc
  25. bencode2.cc
  26. BencodeParser.cc
  27. bitfield.cc
  28. BitfieldMan.cc
  29. bittorrent_helper.cc
  30. BtAbortOutstandingRequestEvent.cc
  31. BtAllowedFastMessage.cc
  32. BtAnnounce.cc
  33. BtBitfieldMessage.cc
  34. BtBitfieldMessageValidator.cc
  35. BtCancelMessage.cc
  36. BtCheckIntegrityEntry.cc
  37. BtChokeMessage.cc
  38. BtDependency.cc
  39. BtExtendedMessage.cc
  40. BtFileAllocationEntry.cc
  41. BtHandshakeMessage.cc
  42. BtHandshakeMessageValidator.cc
  43. BtHaveAllMessage.cc
  44. BtHaveMessage.cc
  45. BtHaveNoneMessage.cc
  46. BtInterestedMessage.cc
  47. BtKeepAliveMessage.cc
  48. BtLeecherStateChoke.cc
  49. BtNotInterestedMessage.cc
  50. BtPieceMessage.cc
  51. BtPieceMessageValidator.cc
  52. BtPortMessage.cc
  53. BtPostDownloadHandler.cc
  54. BtRegistry.cc
  55. BtRejectMessage.cc
  56. BtRequestMessage.cc
  57. BtRuntime.cc
  58. BtSeederStateChoke.cc
  59. BtSetup.cc
  60. BtStopDownloadCommand.cc
  61. BtSuggestPieceMessage.cc
  62. BtUnchokeMessage.cc
  63. BufferedFile.cc
  64. ByteArrayDiskWriter.cc
  65. CheckIntegrityCommand.cc
  66. CheckIntegrityDispatcherCommand.cc
  67. CheckIntegrityEntry.cc
  68. Checksum.cc
  69. ChecksumCheckIntegrityEntry.cc
  70. ChunkChecksum.cc
  71. ChunkedDecodingStreamFilter.cc
  72. ColorizedStream.cc
  73. Command.cc
  74. ConnectCommand.cc
  75. console.cc
  76. ConsoleStatCalc.cc
  77. ContentTypeRequestGroupCriteria.cc
  78. Context.cc
  79. ContextAttribute.cc
  80. cookie_helper.cc
  81. Cookie.cc
  82. CookieStorage.cc
  83. CreateRequestCommand.cc
  84. crypto_hash.cc
  85. CUIDCounter.cc
  86. daemon.cc
  87. DefaultAuthResolver.cc
  88. DefaultBtAnnounce.cc
  89. DefaultBtInteractive.cc
  90. DefaultBtMessageDispatcher.cc
  91. DefaultBtMessageFactory.cc
  92. DefaultBtMessageReceiver.cc
  93. DefaultBtProgressInfoFile.cc
  94. DefaultBtRequestFactory.cc
  95. DefaultDiskWriter.cc
  96. DefaultDiskWriterFactory.cc
  97. DefaultExtensionMessageFactory.cc
  98. DefaultPeerStorage.cc
  99. DefaultPieceStorage.cc
  100. DefaultStreamPieceSelector.cc
  101. DHTAbstractMessage.cc
  102. DHTAbstractTask.cc
  103. DHTAnnouncePeerMessage.cc
  104. DHTAnnouncePeerReplyMessage.cc
  105. DHTAutoSaveCommand.cc
  106. DHTBucket.cc
  107. DHTBucketRefreshCommand.cc
  108. DHTBucketRefreshTask.cc
  109. DHTBucketTree.cc
  110. DHTConnectionImpl.cc
  111. DHTEntryPointNameResolveCommand.cc
  112. DHTFindNodeMessage.cc
  113. DHTFindNodeReplyMessage.cc
  114. DHTGetPeersCommand.cc
  115. DHTGetPeersMessage.cc
  116. DHTGetPeersReplyMessage.cc
  117. DHTInteractionCommand.cc
  118. DHTMessage.cc
  119. DHTMessageDispatcherImpl.cc
  120. DHTMessageEntry.cc
  121. DHTMessageFactoryImpl.cc
  122. DHTMessageReceiver.cc
  123. DHTMessageTracker.cc
  124. DHTMessageTrackerEntry.cc
  125. DHTNode.cc
  126. DHTNodeLookupEntry.cc
  127. DHTNodeLookupTask.cc
  128. DHTNodeLookupTaskCallback.cc
  129. DHTPeerAnnounceCommand.cc
  130. DHTPeerAnnounceEntry.cc
  131. DHTPeerAnnounceStorage.cc
  132. DHTPeerLookupTask.cc
  133. DHTPeerLookupTaskCallback.cc
  134. DHTPingMessage.cc
  135. DHTPingReplyMessage.cc
  136. DHTPingTask.cc
  137. DHTQueryMessage.cc
  138. DHTRegistry.cc
  139. DHTReplaceNodeTask.cc
  140. DHTResponseMessage.cc
  141. DHTRoutingTable.cc
  142. DHTRoutingTableDeserializer.cc
  143. DHTRoutingTableSerializer.cc
  144. DHTSetup.cc
  145. DHTTaskExecutor.cc
  146. DHTTaskFactoryImpl.cc
  147. DHTTaskQueueImpl.cc
  148. DHTTokenTracker.cc
  149. DHTTokenUpdateCommand.cc
  150. DHTUnknownMessage.cc
  151. DirectDiskAdaptor.cc
  152. DiskAdaptor.cc
  153. DlAbortEx.cc
  154. DlRetryEx.cc
  155. DNSCache.cc
  156. download_handlers.cc
  157. download_helper.cc
  158. DownloadCommand.cc
  159. DownloadContext.cc
  160. DownloadEngine.cc
  161. DownloadEngineFactory.cc
  162. DownloadFailureException.cc
  163. DownloadHandler.cc
  164. DownloadHandlerConstants.cc
  165. DownloadResult.cc
  166. EvictSocketPoolCommand.cc
  167. Exception.cc
  168. ExpatXmlParser.cc
  169. ExtensionMessageRegistry.cc
  170. FallocFileAllocationIterator.cc
  171. FatalException.cc
  172. FeatureConfig.cc
  173. FeedbackURISelector.cc
  174. File.cc
  175. FileAllocationCommand.cc
  176. FileAllocationDispatcherCommand.cc
  177. FileAllocationEntry.cc
  178. FileEntry.cc
  179. FillRequestGroupCommand.cc
  180. fmt.cc
  181. FtpConnection.cc
  182. FtpDownloadCommand.cc
  183. FtpFinishDownloadCommand.cc
  184. FtpInitiateConnectionCommand.cc
  185. FtpNegotiationCommand.cc
  186. FtpTunnelRequestCommand.cc
  187. FtpTunnelResponseCommand.cc
  188. gai_strerror.c
  189. GeomStreamPieceSelector.cc
  190. GroupId.cc
  191. GrowSegment.cc
  192. GZipDecodingStreamFilter.cc
  193. GZipEncoder.cc
  194. GZipFile.cc
  195. HandshakeExtensionMessage.cc
  196. HaveEraseCommand.cc
  197. help_tags.cc
  198. HttpConnection.cc
  199. HttpDownloadCommand.cc
  200. HttpHeader.cc
  201. HttpHeaderProcessor.cc
  202. HttpInitiateConnectionCommand.cc
  203. HttpListenCommand.cc
  204. HttpProxyRequestCommand.cc
  205. HttpProxyResponseCommand.cc
  206. HttpRequest.cc
  207. HttpRequestCommand.cc
  208. HttpResponse.cc
  209. HttpResponseCommand.cc
  210. HttpServer.cc
  211. HttpServerBodyCommand.cc
  212. HttpServerCommand.cc
  213. HttpServerResponseCommand.cc
  214. HttpSkipResponseCommand.cc
  215. IndexBtMessage.cc
  216. IndexBtMessageValidator.cc
  217. InitiateConnectionCommand.cc
  218. InitiateConnectionCommandFactory.cc
  219. InitiatorMSEHandshakeCommand.cc
  220. InorderStreamPieceSelector.cc
  221. InorderURISelector.cc
  222. InternalARC4Encryptor.cc
  223. InternalMessageDigestImpl.cc
  224. IOFile.cc
  225. IteratableChecksumValidator.cc
  226. IteratableChunkChecksumValidator.cc
  227. json.cc
  228. JsonParser.cc
  229. LibgmpDHKeyExchange.cc
  230. LogFactory.cc
  231. Logger.cc
  232. LongestSequencePieceSelector.cc
  233. LpdDispatchMessageCommand.cc
  234. LpdMessage.cc
  235. LpdMessageDispatcher.cc
  236. LpdMessageReceiver.cc
  237. LpdReceiveMessageCommand.cc
  238. magnet.cc
  239. message_digest_helper.cc
  240. MessageDigest.cc
  241. MetadataInfo.cc
  242. metalink_helper.cc
  243. Metalink2RequestGroup.cc
  244. MetalinkEntry.cc
  245. Metalinker.cc
  246. MetalinkHttpEntry.cc
  247. MetalinkMetaurl.cc
  248. MetalinkParserController.cc
  249. MetalinkParserState.cc
  250. MetalinkParserStateImpl.cc
  251. MetalinkParserStateMachine.cc
  252. MetalinkParserStateV3Impl.cc
  253. MetalinkParserStateV4Impl.cc
  254. MetalinkPostDownloadHandler.cc
  255. MetalinkResource.cc
  256. MSEHandshake.cc
  257. MultiDiskAdaptor.cc
  258. MultiFileAllocationIterator.cc
  259. MultiUrlRequestInfo.cc
  260. NameResolveCommand.cc
  261. NameResolver.cc
  262. Netrc.cc
  263. NetrcAuthResolver.cc
  264. NetStat.cc
  265. Notifier.cc
  266. NsCookieParser.cc
  267. NullSinkStreamFilter.cc
  268. OpenedFileCounter.cc
  269. option_processing.cc
  270. Option.cc
  271. OptionHandler.cc
  272. OptionHandlerException.cc
  273. OptionHandlerFactory.cc
  274. OptionHandlerImpl.cc
  275. OptionParser.cc
  276. paramed_string.cc
  277. Peer.cc
  278. PeerAbstractCommand.cc
  279. PeerAddrEntry.cc
  280. PeerChokeCommand.cc
  281. PeerConnection.cc
  282. PeerInitiateConnectionCommand.cc
  283. PeerInteractionCommand.cc
  284. PeerListenCommand.cc
  285. PeerReceiveHandshakeCommand.cc
  286. PeerSessionResource.cc
  287. PeerStat.cc
  288. Piece.cc
  289. PiecedSegment.cc
  290. PieceHashCheckIntegrityEntry.cc
  291. PieceStatMan.cc
  292. Platform.cc
  293. prefs.cc
  294. PriorityPieceSelector.cc
  295. ProtocolDetector.cc
  296. RandomStreamPieceSelector.cc
  297. Range.cc
  298. RangeBtMessage.cc
  299. RangeBtMessageValidator.cc
  300. RarestPieceSelector.cc
  301. RealtimeCommand.cc
  302. ReceiverMSEHandshakeCommand.cc
  303. RecoverableException.cc
  304. Request.cc
  305. RequestGroup.cc
  306. RequestGroupEntry.cc
  307. RequestGroupMan.cc
  308. RequestSlot.cc
  309. rpc_helper.cc
  310. RpcMethod.cc
  311. RpcMethodFactory.cc
  312. RpcMethodImpl.cc
  313. RpcRequest.cc
  314. RpcResponse.cc
  315. SaveSessionCommand.cc
  316. SeedCheckCommand.cc
  317. SegmentMan.cc
  318. SelectEventPoll.cc
  319. ServerStat.cc
  320. ServerStatMan.cc
  321. SessionSerializer.cc
  322. SftpDownloadCommand.cc
  323. SftpFinishDownloadCommand.cc
  324. SftpNegotiationCommand.cc
  325. SHA1IOFile.cc
  326. ShareRatioSeedCriteria.cc
  327. Signature.cc
  328. SimpleBtMessage.cc
  329. SimpleRandomizer.cc
  330. SingleFileAllocationIterator.cc
  331. SinkStreamFilter.cc
  332. SocketBuffer.cc
  333. SocketCore.cc
  334. SocketRecvBuffer.cc
  335. SpeedCalc.cc
  336. Sqlite3CookieParser.cc
  337. Sqlite3CookieParserImpl.cc
  338. SSHSession.cc
  339. StreamCheckIntegrityEntry.cc
  340. StreamFileAllocationEntry.cc
  341. StreamFilter.cc
  342. strptime.c
  343. TimeA2.cc
  344. TimeBasedCommand.cc
  345. TimedHaltCommand.cc
  346. timegm.c
  347. TimerA2.cc
  348. TimeSeedCriteria.cc
  349. TorrentAttribute.cc
  350. TrackerWatcherCommand.cc
  351. TransferStat.cc
  352. TruncFileAllocationIterator.cc
  353. UDPTrackerClient.cc
  354. UDPTrackerRequest.cc
  355. UnionSeedCriteria.cc
  356. UnknownLengthPieceStorage.cc
  357. UnknownOptionException.cc
  358. uri_split.c
  359. uri.cc
  360. UriListParser.cc
  361. URIResult.cc
  362. util_security.cc
  363. util.cc
  364. UTMetadataDataExtensionMessage.cc
  365. UTMetadataExtensionMessage.cc
  366. UTMetadataPostDownloadHandler.cc
  367. UTMetadataRejectExtensionMessage.cc
  368. UTMetadataRequestExtensionMessage.cc
  369. UTMetadataRequestFactory.cc
  370. UTMetadataRequestTracker.cc
  371. UTPexExtensionMessage.cc
  372. ValueBase.cc
  373. ValueBaseStructParserStateImpl.cc
  374. ValueBaseStructParserStateMachine.cc
  375. version_usage.cc
  376. wallclock.cc
  377. WatchProcessCommand.cc
  378. WebSocketInteractionCommand.cc
  379. WebSocketResponseCommand.cc
  380. WebSocketSession.cc
  381. WebSocketSessionMan.cc
  382. WinConsoleFile.cc
  383. WinTLSContext.cc
  384. WinTLSSession.cc
  385. WrDiskCache.cc
  386. WrDiskCacheEntry.cc
  387. XmlAttr.cc
  388. XmlParser.cc
  389. XmlRpcDiskWriter.cc
  390. XmlRpcRequestParserController.cc
  391. XmlRpcRequestParserStateImpl.cc
  392. XmlRpcRequestParserStateMachine.cc
  393. ZeroBtMessage.cc

编译Debug、Release、Debug-dynamic、Release-dynamic四个配置,生成两个版本的libaria2.a文件、两个版本的libaria2.dll文件

创建并编译aria2c工程

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

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

 

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

  1. HAVE_CONFIG_H
  2. LOCALEDIR=D:\opensource\msys64\mingw64\share\locale
  3. _POSIX_C_SOURCE=1
  4. CARES_STATICLIB
  5. WSLAY_VERSION=1.1.1

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

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

  1. "D:\opensource\aria2-release-1.36.0-eclipse\src"
  2. "D:\opensource\aria2-release-1.36.0-eclipse"
  3. "D:\opensource\aria2-release-1.36.0-eclipse\lib"
  4. "D:\opensource\aria2-release-1.36.0-eclipse\intl"
  5. "D:\opensource\aria2-release-1.36.0-eclipse\src\includes"
  6. "D:\opensource\msys64\mingw64\include"
  7. "D:\opensource\aria2-release-1.36.0-eclipse\deps\wslay\lib\includes"

 添加静态库连接库文件和包含路径

 

  1. aria2
  2. cares
  3. wsock32
  4. winmm
  5. iphlpapi
  6. psapi
  7. expat
  8. sqlite3
  9. secur32
  10. advapi32
  11. gmp
  12. ssh2
  13. ssl
  14. crypto
  15. gdi32
  16. crypt32
  17. z
  18. wslay
  19. ws2_32
  1. "D:\opensource\msys64\mingw64\lib"
  2. "${workspace_loc:/wslay/Debug}"
  3. "${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.exehttps://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搭建与使用

MSYS模仿了Linux下的编译环境,但与Windows上IDE比起来,不足的是需要自己写Makefile。因此也可以搭建类似Linux的automake环境来生成Makefile。


折腾了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
 
 
/usr/bin/autopoint: line 495: /usr/share/gettext/archive.dir.tar.xz: No such file or directory
tar: This does not look like a tar archive
tar: gettext-0.18: Not found in archive
 
少 gettext-devel :https://github.com/neomutt/neomutt/issues/546
 

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/downloadhttps://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) gettext-devel  27) gperf  28) grep  29) groff  30) help2man
   31) intltool  32) lemon  33) libtool  34) libunrar  35) libunrar-devel
   36) m4  37) make  38) man-db  39) pacman  40) pactoys-git  41) patch
   42) patchutils  43) perl  44) pkg-config  45) pkgfile  46) quilt  47) rcs
   48) scons  49) sed  50) swig  51) texinfo  52) texinfo-tex  53) ttyrec

# pacman -S gcc
   binutils-2.30-1  isl-0.19-1  mpc-1.1.0-1
   msys2-runtime-devel-2.11.1-2
   msys2-w32api-headers-6.0.0.5223.7f9d8753-1
   msys2-w32api-runtime-6.0.0.5223.7f9d8753-1
   windows-default-manifest-6.4-1  gcc-7.3.0-3

安装上述 .exe 文件后,将在C:\msys64\usr\bin中可用。一些可用的可执行文件包括:awk、base64、curl、dd、diff、dos2unix、file、gcc、gdb、gpg、grep、gzip、head、hexdump、hostname、ld、ldd、ls、make、man、 md5sum, 合并, mkdir, 更多, mv, objdump, openssl, perl, python2, python2.7, readelf, rm, rmdir, sed, sha1sum, sha256sum, sha512sum, sort, split, stat, tail, tee, telnet, uniq, uname, vim, wget, which, whoami, 是的。

C:\msys64\usr\bin目录中还有许多其他可执行文件。在决定将 bin 目录添加到 Windows PATH 环境变量时,请记住这一点。

使用 pacman 安装其他软件包

如果你想编译一个使用 -lssl -lcrypto 链接到 libssl 和 libcrypto 的 SSL 程序,需要安装openssl-devel,如下所示。还有许多其他开发包。例如,libbz2-devel、libelf-devel、libunrar-devel 和 libyaml-devel。环境相当有限,但它对学习很有用。

# Install all *-devel packages
pacman -S development

“开发”组中包含的软件包:

:: There are 78 members in group development:
:: Repository msys
   1) apr-devel  2) apr-util-devel  3) aspell-devel  4) bash-devel  5) cloog-devel
   6) gamin-devel  7) gettext-devel  8) glib2-devel  9) gmp-devel  10) heimdal-devel
   11) icu-devel  12) isl-devel  13) jansson-devel  14) jsoncpp-devel  15) libarchive-devel
   16) libargp-devel  17) libassuan-devel  18) libatomic_ops-devel  19) libbobcat-devel
   20) libbz2-devel  21) libcares-devel  22) libcrypt-devel  23) libcurl-devel  24) libdb-devel
   25) libedit-devel  26) libelf-devel  27) libevent-devel  28) libexpat-devel  29) libffi-devel
   30) libgc-devel  31) libgcrypt-devel  32) libgdbm-devel  33) libgnutls-devel
   34) libgpg-error-devel  35) libgpgme-devel  36) libgpgme-python2  37) libgpgme-python3
   38) libguile-devel  39) libiconv-devel  40) libidn-devel  41) libidn2-devel  42) libksba-devel
   43) liblz4-devel  44) liblzma-devel  45) liblzo2-devel  46) libmetalink-devel
   47) libneon-devel  48) libnettle-devel  49) libnghttp2-devel  50) libnpth-devel
   51) libp11-kit-devel  52) libpipeline-devel  53) libpsl-devel  54) libreadline-devel
   55) librhash-devel  56) libsasl-devel  57) libserf-devel  58) libsqlite-devel
   59) libssh2-devel  60) libtasn1-devel  61) libtirpc-devel  62) libtre-devel-git
   63) libunistring-devel  64) libuv-devel  65) libxml2-devel  66) libxslt-devel
   67) libyaml-devel  68) mpc-devel  69) mpfr-devel  70) ncurses-devel  71) openssl-devel
   72) pcre-devel  73) pcre2-devel  74) protobuf-devel  75) ucl-devel  76) util-macros
   77) xproto  78) zlib-devel

您还可以通过 pacman 包管理器获得大量其他包。在https://github.com/msys2/msys2/wiki/Packages查看完整的选项列表,或使用下面的命令进行搜索

# Search pacman for a package (cmake)
pacman -Ss cmake

# msys/cmake 3.12.2-1
#   A cross-platform open-source make system

# Install with
pacman -S cmake
pacman -S clang
pacman -S vim

# Search for gcc (notice the msys/, mingw32/, and mingw64/ prefixes)
pacman -Ss gcc

以msys/为前缀的软件包将安装到 C:\msys64\usr\ 环境中。一些包以mingw64为前缀。这些安装到 C:\msys64\mingw64\ 环境中。

可选:将可执行文件添加到您的 Windows PATH

如果要从 Windows 命令提示符访问所有内容,请将 bin 目录添加到 Windows PATH 环境变量中。请记住,这会在您的路径中添加许多可能与其他应用程序冲突的可执行文件。usr\bin\ 目录包含上面列出的所有可执行文件。该目录中有很多不必要的东西。mingw64\bin\ 目录有sma

C:\msys64\mingw64\bin
C:\msys64\usr\bin

头文件和库

库和包含文件可以在两个地方找到。

# The dynamic lib runtime .dll files will be in bin dirs
# Add the bin directory to PATH environment variable so it can find the .dll files
C:\msys64\mingw64\bin
C:\msys64\usr\bin

# Static libraries
C:\msys64\usr\lib
C:\msys64\mingw64\lib

# Header files
C:\msys64\usr\include
C:\msys64\mingw64\include

关于 msys 与 mingw64 存储库的说明

有些东西只在 msys/ repo 中可用,如 vim 和 git,并且只在 \usr\bin\ 中可用。像 gcc 这样的东西在 msys\、mingw32\ 和 mingw64\ repos 中可用,并且可能最终安装在 \usr\bin\ 和 \mingw64\bin\ 中。这是您必须注意如何设置 PATH 环境变量的地方。如果您添加 \usr\bin\ 以使 vim 或 git 可用,您还将添加该目录中的所有内容,如果您还将 \mingw64\bin\ 目录添加到您的路径,这可能会与某些内容冲突。如果您只想要工具链而不需要太多额外的东西,请使用 mingw64 包。然后,如果需要,您可以只将 \mingw64\bin 目录添加到您的 PATH 中。mingw64 存储库通常有更多可用于安装的库,这些库在通用 msys 存储库中不可用(例如 SDL、exif、freeglut)。

# Install gcc in C:\msys64\mingw64\bin\ directory
# To go with C:\msys64\mingw64\include and C:\msys64\mingw64\lib
pacman -S mingw-w64-x86_64-toolchain

Packages (17)
mingw-w64-x86_64-binutils-2.30-5
mingw-w64-x86_64-crt-git-7.0.0.5245.edf66197-1
mingw-w64-x86_64-gcc-8.2.0-3
mingw-w64-x86_64-gcc-ada-8.2.0-3
mingw-w64-x86_64-gcc-fortran-8.2.0-3
mingw-w64-x86_64-gcc-libgfortran-8.2.0-3
mingw-w64-x86_64-gcc-libs-8.2.0-3
mingw-w64-x86_64-gcc-objc-8.2.0-3
mingw-w64-x86_64-gdb-8.2-1
mingw-w64-x86_64-headers-git-7.0.0.5245.edf66197-1
mingw-w64-x86_64-libmangle-git-7.0.0.5230.69c8fad6-1
mingw-w64-x86_64-libwinpthread-git-7.0.0.5231.7da6518b-1
mingw-w64-x86_64-make-4.2.1-2
mingw-w64-x86_64-pkg-config-0.29.2-1
mingw-w64-x86_64-tools-git-7.0.0.5242.1b29d1bc-1
mingw-w64-x86_64-winpthreads-git-7.0.0.5231.7da6518b-1
mingw-w64-x86_64-winstorecompat-git-7.0.0.5230.69c8fad6-1

配置 Eclipse

有关设置 Eclipse 以使用此工具链的一些提示,请查看使用 MSYS2 设置 Eclipse 的提示

posted @ 2022-05-26 13:45  CharyGao  阅读(158)  评论(0)    收藏  举报