O makefile da minha solução (para Raspbian Buster) contém uma LDFLAGS
definição como esta:
LDFLAGS=-L/usr/lib -L/usr/lib/arm-linux-gnueabihf
…para que a libdir padrão tenha prioridade sobre a específica da plataforma. Infelizmente, tive alguns problemas com uma das libs em /usr/lib
, que era impossível de vincular por causa de uma ABI C++ desatualizada. Quando troquei os dirs, no entanto, tudo funcionou bem:
LDFLAGS=-L/usr/lib/arm-linux-gnueabihf -L/usr/lib
Geralmente, é preferível declarar libdirs dependentes de plataforma antes do universal /usr/lib
? Obrigada.
ATUALIZAÇÃO: A receita correspondente é bastante padrão e diz o seguinte:
$(EXEC) : $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o $(EXEC) $(LDFLAGS) $(LIBRARIES)
$(OBJECTS) : $(SRC)
$(CC) $(CFLAGS) -c $(SRC)
Using
LDFLAGS
é um auxiliar de último recurso. Se você usá-lo em seus makefiles, este é um bom método para tornar seu software não portátil.Melhor escrever Makefiles que usam diretamente a
ld
linha de comando necessária.Você poderia, por exemplo, usar linhas de comando como:
e coloque a lista de diretórios de pesquisa para a pesquisa de biblioteca em
LDPATH
.Observe que as expansões de macro de correspondência de padrões usadas para
LDPATH
não fazem parte damake
especificação POSIX, mas esse recurso foi introduzido pelo SunPro Make em 1986 e copiado por muitas implementações de make, ehsmake
,gnu make
. Se você tiver ummake
, será necessário usar manualmente uma-Lpath
entrada para cada diretório de pesquisa de biblioteca na linha de comando.