2.10. Biên dịch và liên kết các tham số
Biên dịch và liên kết các parameters là một vấn đề mà các lập trình viên C/C++ thường gặp phải. Trong phần này, chúng tôi sẽ giới thiệu ngắn các bước biên dịch và link parameters thường được dùng trong CGO.
2.10.1. Tham số biên dịch :
CGO cung cấp ba tham số CFLAGS/CPPFLAGS/CXXFLAGS. Trong đó:
- CFLAGS sẽ ứng với việc biên dịch ngôn ngữ C (.c).
- CPPFLAGS sẽ ứng với C/C++ (.c, .cc, .cpp, .cxx).
- CXXFLAGS ứng với C++ thuần (.cc, .cpp, *.cxx).
2.10.2. Tham số liên kết :
Trong CGO ${SRCDIR}
là một đường dẫn tuyệt đối trong thư mục hiện tại, các file định dạng của đối tượng C và C++ sau khi được biên dịch là như nhau, do đó LDFLAGS
sẽ ứng với các C/C++ link parameters.
2.10.3. Lệnh pkg-config
Dùng công cụ pkg-config để thuận tiện cho việc compile và link parameter:
- Lệnh
#cgo pkg-config abc
để sinh ra lệnh compile và link parameter cho thư việnabc
. - Lệnh
pkg-config abc --cflags
sẽ sinh racompiler parameters
. - Lệnh
pkg-config abc --libs
để sinh ra links parameters.
Có một số thư viện C/C++ non-standard mà pkg-config không hỗ trợ. Khi đó, chúng ta có thể hiện thực thủ công compilation và link parameter.
2.10.4. Chuỗi cài đặt package
Lệnh go get
package sẽ liên kết các package phụ thuộc liên quan. Một chuỗi các package phụ thuộc sau như pkgA -> pkgB -> pkgC -> pkgD. Sau khi go get A_package
, chúng sẽ get B, C, D package. Nếu việc build hỏng sau khi get package_B, nó sẽ dẫn tới việc hỏng toàn bộ chuỗi , kết quả là lệnh get package_A bị hỏng.
Sẽ có một số lý do cho việc hỏng chuỗi get, đây là một số lý do phổ biến:
- Một số hệ thống không hỗ trợ, việc biên dịch sẽ hỏng.
- Phụ thuộc vào
cgo
- User không có
gcc
được cài đặt sẵn. - Những thư viện độc lập không được cài đặt.
- User không có
- Phụ thuộc vào
pkg-config
- Không được cài đặt trên windows.
- Không có file
bc
được tìm thấy tương ứng.
- Phụ thuộc vào
custom pkg-config
: yêu cầu một số thiết lập thêm. - Phụ thuộc vào
swig
: user chưa cài đặtswig
, hoặc phiên bản không tương thích.
Liên kết
- Phần tiếp theo: Lời nói thêm
- Phần trước: Thư viện tĩnh và động
- Mục lục