linker me dice que no puede resolver símbolos, pero ¿están ahí?

Estoy tratando de compilar una aplicación de prueba simple usando una biblioteca que he escrito. Esto compila y funciona bien en otras máquinas.

Tengo libroller.so disponible en / usr / lib. Estoy compilando un main.cpp como tal:

g++ -g3 -Wall -I"../../" -lrt -lroller -o rap main.o

Se queja de numerosos errores como:

/....../main.cpp:51: undefined reference to `Log::i(char const*, ...)'

Sin embargo, sé que existen en esto, así que:

nm -Ca /usr/lib/libroller.so | grep "Log::i"            
00000000001f5d50 T Log::i(char const*, ...)
0000000000149530 W Log::i(std::string const&)

Ambas son de 64 bits:

file /usr/lib/libroller.so           
/usr/lib/libroller.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

file main.o   
main.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

Diferente aGCC y ld no pueden encontrar los símbolos exportados ... ¡pero están ahí! Estoy bastante seguro de que estos símbolos están definidos. El mismo .so funciona con otro usando algunos de los mismos símbolos.

EDITAR / RESPONDER: El orden de los objetos es importante. Colocar main.o antes de las bibliotecas era necesario. Supongo que el enlazador no tenía símbolos no resueltos con los que lidiar hasta que llegó a main.o, que era el último objeto de su lista. Todavía estoy un poco confundido sobre por qué esto funcionó en otras máquinas durante muchos meses ...

Respuestas a la pregunta(6)

Su respuesta a la pregunta