path go relative cgo ldflags

path - Cómo usar una ruta relativa para LDFLAGS en golang



relative cgo (2)

Actualmente no puedes. El directorio cambia entre el momento en que se crea el comando y el enlace. Por ahora, debe vincular a una ruta absoluta o utilizar la variable de entorno CGO_LDFLAGS .

Hubo una confirmación justo después de go1.4 que agregó una variable ${SRCDIR} que se reemplazó por la ruta absoluta al directorio que contiene el archivo fuente en tiempo de compilación. https://github.com/golang/go/issues/7891 . Esto estará en go1.5, y puedes usarlo fácilmente ahora construyendo Go from source.

Soy nuevo en Golang, y estoy tratando de construir un programa de Golang que use una lib estática (archivo .a)

la estructura del directorio para mi proyecto como abajo

└─testserver ├─bin ├─pkg └─src ├─logging └─testserver ├─libtest.a └─test.go

las banderas para cgo en test.go como abajo

// #cgo LDFLAGS: -L /home/test/testserver/src/testserver -ltest // #include "test.h" import "C"

cuando estoy usando la ruta absoluta para LDFLAGS -L, funciona en finos, pero cuando cambio la ruta a una ruta relativa, por ejemplo

// #cgo LDFLAGS: -L ./testserver -ltest

y luego ejecuta el comando

go install testserver

me devuelve un error y dice "no puedo encontrar -ltest"

mi pregunta es ¿cómo puedo usar una ruta relativa en LDFLAGS? , para que pueda construir el proyecto en cualquier camino. ¡Gracias!


Es realmente muy bueno usar $ {SRCDIR} para resolver el problema de la ruta relativa .

Además, $ {SRCDIR} indica la ruta absoluta del archivo go actual . Use el comando go build -x . para verificar la salida.

$ go build -x . ... cd /root/sourcecode/src/tcp/aes CGO_LDFLAGS="-g" "-O2" "-L/root/sourcecode/src/tcp/aes/aes" "-laes" /usr/local/go/pkg/tool/linux_amd64/cgo -objdir $WORK/tcp/aes/_obj/ -importpath tcp/aes -- -I $WORK/tcp/aes/_obj/ aes.go cd $WORK ... $ tcp/aes /usr/bin/ld: cannot find -laes collect2: error: ld returned 1 exit status

Es incrrecto, porque lib libaes.a localiza lo mismo que el archivo go. Luego lo cambié y pasé.