Директива #cgo LDFLAGS
Директива #cgo LDFLAGS используется в файлах Go
для передачи дополнительных параметров линковщику
при компиляции C-кода через cgo. Она позволяет
подключать внешние C-библиотеки, указывать пути
к ним и задавать другие опции компоновщика.
В качестве значения передается строка с флагами,
которая будет добавлена к команде линковки.
Синтаксис
// #cgo LDFLAGS: -lm -lz -L/path/to/libs
import "C"
Пример
Давайте подключим математическую библиотеку libm
и вызовем функцию pow из C:
package main
/*
#include <math.h>
#cgo LDFLAGS: -lm
*/
import "C"
import "fmt"
func main() {
x := C.double(2.0)
y := C.double(3.0)
res := C.pow(x, y)
fmt.Printf("%.0f\n", float64(res))
}
Результат выполнения кода:
"8"
Пример
Подключим библиотеку сжатия zlib с указанием
пути для поиска библиотек:
package main
/*
#include <zlib.h>
#cgo LDFLAGS: -lz -L/usr/local/lib
*/
import "C"
import "fmt"
func main() {
version := C.zlibVersion()
fmt.Printf("zlib version: %s\n", C.GoString(version))
}
Результат выполнения кода:
"zlib version: 1.2.11"
Пример
Использование нескольких флагов в одной директиве для статической линковки библиотеки:
package main
/*
#cgo LDFLAGS: -static -lssl -lcrypto -L/usr/lib/x86_64-linux-gnu
#include <openssl/ssl.h>
*/
import "C"
import "fmt"
func main() {
version := C.SSLeay_version(C.SSLEAY_VERSION)
fmt.Printf("OpenSSL version: %s\n", C.GoString(version))
}
Результат выполнения кода:
"OpenSSL version: OpenSSL 1.1.1w 11 Sep 2023"
Смотрите также
-
директиву
#cgo CFLAGS,
которая задает флаги для компилятора C -
директиву
#cgo pkg-config,
которая использует pkg-config для получения флагов -
функцию
C.CString,
которая преобразует строку Go в C-строку -
функцию
C.GoString,
которая преобразует C-строку в строку Go