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é.