c++ linker clang chaiscript

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.