c++ - Clang vinculando con SO
linker chaiscript (1)
Sigo recibiendo
ld: library not found for -lchaiscript_stdlib-5.3.1.so
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Cuando trato de vincular a .so, el comando que estoy usando es.
clang++ Main.cpp -o foo -L./ -lchaiscript_stdlib-5.3.1.so
¿Qué estoy haciendo mal?
libchaiscript_stdlib-5.3.1.so está en el mismo directorio que Main.cpp, pensé que -L./ agregaría .so a las rutas de búsqueda de la biblioteca.
Sí, la opción -L
agrega la ruta de búsqueda, pero el vinculador agrega el sufijo .so
(o .a
) en sí mismo (al igual que agrega el prefijo lib
). Entonces solo necesita tener -lchaiscript_stdlib-5.3.1
y el enlazador lo encontrará.
También puede omitir la adición de la ruta y vincular directamente con el archivo:
clang++ Main.cpp -o foo libchaiscript_stdlib-5.3.1.so
Tenga en cuenta que el enlazador de tiempo de ejecución (que es lo que realmente carga las bibliotecas compartidas cuando ejecuta su programa) puede no ser capaz de encontrar la biblioteca si no está en la ruta de los enlazadores en tiempo de ejecución. Sin embargo, puede decirle al enlazador (tiempo de compilación) que agregue una ruta a la ruta de la biblioteca compartida en el programa generado:
clang++ Main.cpp -o foo libchaiscript_stdlib-5.3.1.so -Wl,-rpath,/absolute/path
La opción -Wl
le dice al front-end del compilador que pase una opción al enlazador, y la opción linker -rpath
agrega una ruta a la ruta de búsqueda del runtime-linker.