Hầu hết để build mã nguồn trên Ubuntu, bạn nên cài trước các công cụ cần thiết để thực hiện build bằng lệnh dưới. Bộ này có hầu hết ứng dụng hỗ trợ build mã nguồn như make, gcc, cc, g++ và rất nhiều thư viện liên quan.
sudo apt-get install build-essential sudo apt install cmake sudo apt-get install autotools-dev sudo apt-get install autoconf
Mục lục
Thư viện boost
Boost là thư viện chuẩn mã nguồn mở C/C++ hoàn toàn miễn phí. Nó có hầu như tất cả các cấu trúc dữ liệu, thuật toán, các hàm tiện ích và nó được cập nhật liên tục theo các standard hoặc report mới liên quan C/C++. Đây là thư viện cơ bản mà được rất nhiều lập trình viên sử dụng. Thông thường các lập trình viên thường sử dụng nên chỉ cần cài đặt, không cần thiết phải build sourcecode. Chi tiết bạn xem trên trang chủ: http://www.boost.org/
Cài đặt
Trên Windows
* Với Visual Studio:
Bạn download trực tiếp bản cài đặt tại địa chỉ: https://sourceforge.net/projects/boost/files/boost-binaries/, bạn chỉ cần chọn phiên bản boost và chọn thư viện tương ứng cho Visual Studio đang cài đặt trên máy bạn.
Hiện tôi đang sử dụng phiên bản 1.65.1 hỗ trợ tất cả phiên bản Visual Studio (boost_1_65_1-bin-msvc-all-32-64.7z): https://sourceforge.net/projects/boost/files/boost-binaries/1.65.1/boost_1_65_1-bin-msvc-all-32-64.7z/download => Sau đó bạn chỉ cần giải nén rồi đẩy vào thư mục nào đó là được. Thư mục sau khi giải nén của tôi là: E:\OpenSource-Libraries\boost_1_65_1
* Với MinGW
Hiện tại tôi chưa thấy có bản binary sử dụng cho MinGW. Trường hợp này phải thực hiện build.
Trên Ubuntu
Bạn chỉ cần chạy lệnh sau để cài đặt:
sudo apt-get update sudo apt-get install libboost-all-dev
Build mã nguồn
Source code bạn có thể download từ: https://dl.bintray.com/boostorg/release/1.66.0/source/ (Chọn phiên bản bạn muốn tải về). Hiện tôi sử dụng bản (boost_1_65_1.zip): https://nchc.dl.sourceforge.net/project/boost/boost/1.65.1/boost_1_65_1.zip => Tôi giải nén vào thư mục bất kỳ nào đó.
Trên Windows
* Với Visual Studio
Yêu cầu bạn phải cài đặt Visual Studio trước. Tùy từng phiên bản Visual Studio mà tham số thay đổi chút.
Vào thự mục source của boost, mở command line và đánh lệnh sau thực hiện build cho Visual Studio 2013:
.\bootstrap.bat vc12 .\b2
Sau khi build thành công, output như sau:
- Include path: <Thư mục mã nguồn boost>
- Library path: <Thư mục mã nguồn boost>\stage\lib
Nếu muốn build cho “Visual Studio 2015” thì bạn thay vc12 bằng vc14. Tương tự cho các phiên bản khác.
* Với MinGW
Chi tiết bạn xem tại địa chỉ: https://sourceforge.net/p/mingw-w64/wiki2/Building%20Boost/. Yên cầu bạn phải cài đặt MinGW trước.
Nhìn hướng dẫn trên có vẻ dài, tôi xin giới thiệu bạn hướng dẫn đơn giản hơn khi tôi build bản boost_1_65_1 như sau:
- B1: Sửa tệp bootstrap.bat, bạn tìm dòng sau:
set toolset=msvc
Sửa lại thành:
::set toolset=msvc
set toolset=gcc - B2: Đánh lệnh sau để add thêm đường dẫn MinGW vào biến môi trường PATH. Tốt nhất để đường dẫn này lên đầu tiên:
SET PATH=C:\MinGW\bin;%PATH% - B3: Đánh lệnh sau để build
.\bootstrap.bat gcc
.\b2
Tùy phiên bản MinGW có thể phát sinh lỗi, tôi build với bản mingw từ địa chỉ : https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/mingw-w64-install.exe thì build thành công. Lib sinh ra tương ứng với phiên bản MinGw:
Sau khi build thành công, output như sau:
- Include path: <Thư mục mã nguồn boost>
- Library path: <Thư mục mã nguồn boost>\stage\lib
Trên Ubuntu
Vào thư mục chứa mã nguồn, bật Terminal và đánh lệnh sau để build:
./bootstrap.sh ./b2
Thư viện OpenSSL
Cài đặt
Trên Windows
Bạn download trực tiếp bản cài đặt tại địa chỉ: http://slproweb.com/products/Win32OpenSSL.html, bạn nhớ chọn phiên bản phù hợp. Thông thường thì dùng phiên bản 64 bit mới nhất 1.1.0 nhưng đôi khi bạn cần sử dụng phiên bản cũ hơn 1.0.2 tùy theo project bạn sử dụng yêu cầu phiên bản nào. Tôi thường sử dụng bản cũ hơn Win64 OpenSSL v1.0.2n vì tương thích với nhiều thư viện OpenSource khác. Sử dụng cho cả Visual Studio và MinGW.
Trên Ubuntu
Bạn chỉ cần chạy lệnh sau để cài đặt:
sudo apt-get update sudo apt-get install openssl-dev
Build mã nguồn
Trên Windows
* Với Visual Studio
Bạn xem hướng dẫn tại địa chỉ: http://www.askyb.com/windows/compiling-and-installing-openssl-for-32-bit-windows/
* Với MinGW
Bạn xem hướng dẫn tại địa chỉ: https://stackoverflow.com/questions/9379363/how-to-build-openssl-with-mingw-in-windows
Trên Ubuntu
N/A
Thư viện socket.io-client-cpp
Chi tiết: https://github.com/socketio/socket.io-client-cpp
Cài đặt
Không có bộ cài, phải build lại từ mã nguồn.
Build mã nguồn
Các bước thực hiện:
- B1: Cài đặt thêm thư viện cần thiết, đó là thư viện boost và openssl:
Trên Ubuntu đánh lệnh sau:
sudo apt-get update
sudo apt-get install libboost-all-dev
sudo apt-get install openssl-dev
Trên Windows thực hiện cài đặt (Bạn nhớ thư mục cài đặt để còn sử dụng):
boost_1_65_1.zip: https://nchc.dl.sourceforge.net/project/boost/boost/1.65.1/boost_1_65_1.zip (Chỉ cần giải nén)
Win64 OpenSSL v1.0.2n: http://slproweb.com/download/Win64OpenSSL-1_0_2n.exe
(Nhớ download bản full, tùy bạn build 32 hay 64 bit mà lấy đúng bản). - B2: Download mã mã nguồn mới nhất từ địa chỉ: https://github.com/socketio/socket.io-client-cpp và thực hiện giải nén.
- B3: Cập nhật open source mà project sử dụng:
- Cập nhật thư viện rapidjson: Tải bản mới nhất từ địa chỉ https://github.com/Tencent/rapidjson và giải nén vào thư mục lib của socket.io-client-cpp
- Cập nhật thư viện websocketpp: Tải bản mới nhất từ địa chỉ https://github.com/zaphoyd/websocketpp và giải nén vào thư mục lib của socket.io-client-cpp
- B4: Thực hiện build
- Trên Ubuntu đánh lệnh sau để build:
mkdir build
cd build
cmake ..
make
sudo make install - Trên Windows để build với Visual Studio 2013 bạn dùng lệnh sau (Tùy phiên bản Visual Studio mà thay đổi tham số cho phù hợp):
mkdir build-vs2013
cd build-vs2013
SET BOOST_ROOT=E:\OpenSource-Libraries\boost_1_65_1
SET OPENSSL_ROOT_DIR=E:\OpenSource-Libraries\OpenSSL-Win64
cmake.exe -G “Visual Studio 12” ..
Chú ý thư mục tới boost và OpenSSL bạn phải sửa lại cho phù hợp trên máy bạn. Sau khi xong thì mởi tệp solution (*.sln) để build bằng Visual Studio. - Trên Windows với MinGW: Trên Windows đầu tiên bạn phải build lại boost với MinGW (Xem hướng dẫn ở trên), thư mục source build giả sử là: E:\OpenSource-Libraries\boost_1_65_1_src. Sau đó dùng lệnh sau để build:
mkdir build-mingw
cd build-mingw
SET BOOST_ROOT=E:\OpenSource-Libraries\boost_1_65_1_src
SET OPENSSL_ROOT_DIR=E:\OpenSource-Libraries\OpenSSL-Win64
cmake.exe -G “MinGW Makefiles” ..
mingw32-make
- Trên Ubuntu đánh lệnh sau để build:
Khi sử dụng thư viện socket.io-client-cpp trên Visual Studio, chú ý phải add thêm thư viện boost và openssl. Khi build banj nhows phải build ở chế độ MDD hoặc MD, không build được ở chế độ MT/MTD.
Thư viện boost sử dụng:
- Debug: libboost_system-vc120-mt-gd-1_65_1.lib, libboost_date_time-vc120-mt-gd-1_65_1.lib, libboost_random-vc120-mt-gd-1_65_1.lib
- Release: libboost_system-vc120-mt-1_65_1.lib, libboost_date_time-vc120-mt-1_65_1.lib, libboost_random-vc120-mt-1_65_1.lib
Một số lỗi phát sinh
error: C3321: an initializer list is unexpected in this context
Khi build trên Visual Studio, Qt thì gặp lỗi liên quan dòng log. Xử lý theo link sau: [1]
Thay dòng:
if(ec)LOG(“ec:”<<ec.message()<<endl){};
bằng:
if(ec)LOG(“ec:”<<ec.message()<<endl);{};
Các phần khác tương tự.
C2065: ‘SSL_R_SHORT_READ’: undeclared identifier
Thực hiện xử lý theo link: [2]
Thay:
SSL_R_SHORT_READ
bằng:
boost::asio::ssl::error::stream_truncated
Error with emit function on Qt
Khi build gặp lỗi liên quan tới hàm emit của SocketIO-Client. Lỗi này là do xung đột giữa hàm emit của SocketIO và hàm emit của Qt.
Trường họp này phải đổi tên hàm emit trong SocketIO-Client thành emit_signal.
Chi tiết xem tại: [3]
Phần mềm BFGMiner
Cài đặt
Bạn vào trực tiếp trang sau để tải và cài đặt: http://bfgminer.org/
Build mã nguồn
Trong nhiều trường hợp bạn muốn tự build cho an toàn, tránh bản cài đặt có thể có trojan hoặc virus thì bạn có thể làm theo hướng dẫn dưới. BFGMiner hay sử dụng để mining LTC bằng phần cứng Gridseed.
Mã nguồn bạn download từ địa chỉ: http://bfgminer.org/files/
Sau khi download xong, bạn giải nén.
Trên Ubuntu
Hiện tại tôi chưa build, nhưng trên Linux/Ubuntu thường build dễ hơn.
Trên Windows
Bạn đọc tệp “windows-build.txt” để biết cách build. Các bước tôi lấy từ trong file này, nhưng highlight một số chỗ vướng mắc khi thực hiện:
- Cài đặt MinGW
- B1: Vào trang https://sourceforge.net/downloads/mingw, tải và chạy tệp mingw-get-setup.exe.
- B2: Thực hiện cấu hình.
- Đầu tiên chọn “Basic Setup“, đánh dấu cài đặt các gói sau: mingw-developer-toolkit, mingw32-base, mingw-gcc-g++, and msys-base
- Tiếp theo chọn “All Packages“, đánh dấu cài đặt các gói sau: mingw32-pthreads-w32 (dev), mingw32-libpdcurses (dev), mingw32-pdcurses (bin), msys-libopenssl (dev)
- B3: Kích vào “Installation > Apply Changes => Apply“, sau đó chờ đến lúc xong thì nhấn OK.
- Cài đặt MinGW Post-Install: Kiểm tra “MinGW Shell” trong menu Start, nếu đã có thì bỏ qua bước này. Không có thì thực hiện như sau:
- Chuyển đến thư mục “C:\MinGW\msys\1.0\postinstall“, chạy pi.bat và làm theo hướng dẫn => Trường hợp không có thì download hai tệp pi.bat và pi.sh từ địa chỉ https://sourceforge.net/p/mingw/msys-dvlpr/ci/764e28fb3117acdbf85a5096442182ca355ea871/tree/postinstall/ vào thư mục này.
- Chuyển đến thư mục “C:\MinGW\msys\1.0“, kích phải vào tệp msys.bat chọn “Send to => Desktop (create shortcut)“.
- Ra màn hình Desktop, đổi tên shortcut vừa tạo thành “MinGW Shell“. Sau đó kích phải vào shortcut, đổi giá trị trong “Start in” thành “C:\MinGW\msys\1.0\bin“
- Cài đặt YASM (Chỉ sử dụng nế sử dụng CPU mining)
- Vào trang http://yasm.tortall.net/Download.html, tải bản Win32 hoặc Win64 .exe, phụ thuộc vào phiên bản Windows của bạn
- Đổi tên tệp thành yasm.exe và copy vào thư mục C:\MinGW\bin
- Cài đặt uthash
- Vào trang http://troydhanson.github.io/uthash/, tải tệp uthash-master.zip
- Giải nén và copy các tệp trong thư mục “uthash-master/src” vào thư mục “C:\MinGW\include“
- Cài đặt GTK+
- Vào trang http://sourceforge.net/projects/gtk-win/, tải bộ cài “gtk2-runtime installer“
- Thực hiện cài đặt
- Sau đó copy tệp libglib-2.0-0.dll từ C:\Program Files\GTK2-Runtime\bin vào thư mục C:\MinGW\bin
- Cài đặt pkg-config:
- Vào trang http://www.gtk.org/download/win32.php, tìm một phiên bản pkg-config có cả Tool và Dev để cài đặt => Hiện tại trang này lỗi, bạn hãy download từ địa chỉ http://win32builder.gnome.org/packages/3.6/pkg-config_0.28-1_win32.zip và http://win32builder.gnome.org/packages/3.6/pkg-config-dev_0.28-1_win32.zip
- Thực hiện giải nén và copy thư mục bin vào C:\MinGW
- Cài đặt libcurl:
- Vào trang http://curl.haxx.se/download.html#Win32
- Tìm “Win32 – Generic heading”, tải link có chứa cả *libcurl* (không chỉ binary) và *SSL*
- Mở tệp zip và giải nén thư mục lib, include và bin vào trong thư mục “C:\MinGW“
- Sửa tệp C:\MinGW\lib\pkgconfig\libcurl.pc, đổi “-lcurl” thành “-lcurl -lcurldll“
- Cài đặt libjansson:
- Vào trang http://www.digip.org/jansson/releases/, tải tệp .tar.gz mới nhất (không phải tệp doc.tar.gz)
- Mở tệp .tar.gz và giải nén thư mục jansson tới C:\MinGW\msys\1.0\home\USER (Trong đó USER là tên tài khoản máy)
- Kích vào Start và chạy MinGW Shell, đánh lệnh sau (Nhớ thay X.X bằng phiên bản tương ứng):
cd ~/jansson-X.X
./configure –prefix=/MinGW
make
make check
make install
- Cài đặt libusb:
- Vào trang http://git.libusb.org/?p=libusb.git;a=snapshot;h=master;sf=zip, tải tệp zip => Nhưng link này bị chết, vì thế bạn tải tệp trực tiếp từ link: https://sourceforge.net/projects/libusb/files/libusb-1.0/libusb-1.0.21/.
- Giải nén vào thư mục C:\MinGW\msys\1.0\home\USER.
- Vào MinGW Shell, đánh lệnh sau (Thay thế XYZ bằng phiên bản tương ứng)
cd ~/libusb-master-XYZ
/autogen.sh –disable-debug-log –prefix=/MinGW
make
make install
- Cài đặt libmicrohttpd:
- Vào trang http://ftp.gnu.org/gnu/libmicrohttpd/, tải bản w32.zip mới nhất.
- Giải nén thư mục share, lib, include, và bin vào thư mục C:\MinGW
- Cài đặt libevent:
- Vào trang http://libevent.org/, tải bản stable.tar.gz mới nhất.
- Mở tệp .tar.gz và giải nén libevent-X.Y.Z-stable tới tệp C:\MinGW\msys\1.0\home\USER
- Vào MinGW Shell, đánh lệnh sau (Thay thế X.Y.Z thành phiên bản tương ứng):
cd ~/libevent-X.Y.Z-stable
./configure –disable-openssl –prefix=/MinGW
make
make install
=> Khi build có thể gặp lỗi sau:
listener.c:568:16: error: ‘ERROR_IO_PENDING’ undeclared (first use in this function)
=> Trường hợp này thêm #include <winerror.h> vào tệp config.h
- Cài đặt HIDAPI:
- Vào trang https://github.com/signal11/hidapi, kích vào Releases và tải tệp zip mới nhất.
- Mở tệp zip và giải nén thư mục hidapi-hidapi tới C:\MinGW\msys\1.0\home\USER
- Vào MinGW Shell, đánh lệnh sau (Thay X.Y.Z bằng phiên bản tương ứng):
cd ~/hidapi-hidapi-X.Y.Z
./bootstrap
./configure –prefix=/MinGW
make
make install
- Cài đặt Git:
- Vào trang http://git-scm.com/downloads, kích Download for Windows
- Chạy tệp download về để cài đặt.với cấu hình mặc định
- Cấu hình Git trong MinGW
- Tới thư mục C:\MinGW\msys\1.0\home\USER
- Tạo tệp text tên là profile.txt với nội dung sau:
PATH=$PATH:/c/Program\ Files/Git/bin - Vào MinGW Shell, đánh lệnh sau:
mv ~/profile.txt ~/.profile
- Khởi động lại MinGW Shell
- Build cfgminer:
- Vào thư mục C:\MinGW\include, tạo tệp mới tên mstcpip.h với nội dung như sau:
struct tcp_keepalive
{
u_long onoff;
u_long keepalivetime;
u_long keepaliveinterval;
};
#ifndef USE_WS_PREFIX
#define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR, 4)
#else
#define WS_SIO_KEEPALIVE_VALS _WSAIOW(WS_IOC_VENDOR, 4)
#endif - Vào MinGW Shell, đánh lệnh sau để build:
cd ~/
git clone git://github.com/luke-jr/bfgminer.git
cd bfgminer/
./autogen.sh
./configure
make
Khi build có thể xảy ra lỗi sau:- Không tìm thấy tệp libusb.h: Thực hiện sao chép hết các tệp *.h trong thư mục include/libusb-1.0 ra thư mục include
- Loi bao khong tim thay usbiodef.h: Copy tệp này từ thư mục include\ddk ra thư mục include
- Báo lỗi miner.c:1446:25: error: ‘ERROR_INSUFFICIENT_BUFFER’ undeclared => Thêm dòng #include <winerror.h> vào cuối tệp config.h
- Vào thư mục C:\MinGW\include, tạo tệp mới tên mstcpip.h với nội dung như sau:
- Đóng gói thành ứng dụng: Bằng cách lấy các tệp ở các thư mục dưới:
- C:\MinGW\msys\1.0\home\USER\bfgminer:
- bfgminer.exe
- bfgminer-rpc.exe
- COPYING
- LICENSE
- README*
- C:\MinGW\msys\1.0\home\USER\bfgminer\opencl:
- .cl
- C:\MinGW\msys\1.0\home\USER\bfgminer\libbase58\.libs:
- libbase58-0.dll
- C:\MinGW\msys\1.0\home\USER\bfgminer\libblkmaker\.libs:
- libblkmaker-0.1-6.dll
- libblkmaker_jansson-0.1-6.dll
- C:\MinGW\bin:
- libcurl.dll
- libjansson-4.dll
- libmicrohttpd-10.dll
- libpdcursesw.dll
- pthreadGC2.dll
- libusb-1.0.dll
- libidn-11.dll
- libeay32.dll
- ssleay32.dll
- libgcc_s_dw2-1.dll
- libgnutls-28.dll
- libgcrypt-11.dll
- libplibc-1.dll
- libgmp.dll
- libintl-8.dll
- libgpg-error-0.dll
- libiconv-2.dll
- libevent-2-0-5.dll
- zlib1.dll
- Chú ý:
- Nhiều file không có trong thư mục tương ứng ở trên có thể tìm trong thư mục khác. Nếu vẫn không có thì thôi.
- Sau khi xong chạy tệp bfgminer.exe xem báo lỗi theo dll nào thì vào trang https://www.dll-files.comđể tìm.
- C:\MinGW\msys\1.0\home\USER\bfgminer:
Phần mềm XMRig
XMRig là phần mềm mã nguồn mở cho phép đào XMR bằng CPU với hiệu năng cao.
Cài đặt
Bạn có thể vào trực tiếp trang https://github.com/xmrig/xmrig/releases để lấy bản chạy mới nhất.
Build mã nguồn
Trên Windows:
Trên Ubuntu 16.04
Chuẩn bị:
sudo apt-get install libtool m4 automake
sudo apt-get install make
Build bản libuv 1.x:
Phải lấy bản 1.x mới nhất, bản cũ không build được CMRig. Nếu có bản cũ thì remove bằng lệnh:
sudo apt-get remove libuv-dev
Cài đặt bản 1.x mới nhất:
git clone https://github.com/libuv/libuv.git -b v1.x
cd libuv
./autogen.sh
./configure
make
make check
sudo make install
Build CMRig:
git clone https://github.com/xmrig/xmrig.git
cd xmrig
mkdir build
cd build
cmake .. -DWITH_HTTPD=OFF -DWITH_TLS=OFF
make
Vì một số lý do, mình không muốn truyền tham số, do đó mình sửa thêm hàm main trong tệp src/xmrig.cpp. Hiện tại:
#include "App.h"
int main(int argc, char **argv) {
App app(argc, argv);
return app.exec();
}
Đổi thành code như dưới. Code dưới sửa để không phải nhập tham số khi chạy:
#include "App.h"
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv) {
//App app(argc, argv);
//return app.exec();
int nArgcMax = 20;
char** pArgv = (char**) malloc(nArgcMax*sizeof(char*));
for (int i=0; i<nArgcMax; i++) {
pArgv[i] = (char*) malloc(200);
}
int nArgc = 0;
strcpy(pArgv[nArgc++], argv[0]);
const char* minerPoolName = "MinerGate"; // MinerGate/MineXMR
if (strcmp(minerPoolName, "MinerGate")==0) {
// MinerGate: https://minergate.com/internal
strcpy(pArgv[nArgc++], "--algo=cryptonight");
strcpy(pArgv[nArgc++], "--url=stratum+tcp://94.130.48.154:45700");
//strcpy(pArgv[nArgc++], "--url=stratum+tcp://xmr.pool.minergate.com:45700");
strcpy(pArgv[nArgc++], "--user=thangdao1983@gmail.com");
strcpy(pArgv[nArgc++], "--pass=1");
} else if (strcmp(minerPoolName, "MineXMR")==0) {
// MineXMR: https://minexmr.com/#worker_stats
strcpy(pArgv[nArgc++], "--algo=cryptonight");
//strcpy(pArgv[nArgc++], "--url=stratum+tcp://sg.minexmr.com:4444");
strcpy(pArgv[nArgc++], "--url=stratum+tcp://139.99.120.73:4444");
strcpy(pArgv[nArgc++], "--user=49xkvV9txNfbtAB83S5XHEDToKv4QEaMa6y7aFFzTYb4bSExDTyj5BPjFJucSAzzXPch1CaDtgWUGYzNPnM5d2i85iSVdmN.5");
strcpy(pArgv[nArgc++], "--pass=1");
}
// General parameters
strcpy(pArgv[nArgc++], "--max-cpu-usage=75");
//strcpy(pArgv[nArgc++], "--threads=2");
//App app(argc, argv);
App app(nArgc, pArgv);
for (int i=0; i<nArgcMax; i++) {
free(pArgv[i]);
}
free(pArgv);
return app.exec();
}
Trả lời