LapTrinhBlockchain

Chia sẻ kiến thức về Lập Trình Blockchain

Kiến thức lập trình, Lập trình C/C++

Hướng dẫn build, cài đặt một số thư viện opensource C/C++ thông dụng

Hướng dẫn build, cài đặt một số thư viện opensource C/C++ thông dụng

Hướng dẫn build, cài đặt một số thư viện opensource C/C++ thông dụng

Chia sẻ bài viết
5
(6)

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

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:

RTENOTITLE

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.ziphttps://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.2nhttp://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

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:
  • 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 libinclude 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:
  • Cài đặt libmicrohttpd:
  • 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
  • Đó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.

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();
}

Bài viết này có hữu ích với bạn?

Kích vào một biểu tượng ngôi sao để đánh giá bài viết!

Xếp hạng trung bình 5 / 5. Số phiếu: 6

Bài viết chưa có đánh giá! Hãy là người đầu tiên đánh giá bài viết này.

Trả lời

Giao diện bởi Anders Norén