Clang linking with a .so file

31,311

Yes, the -L option adds the search path, but the linker adds the .so (or .a) suffix itself (just like it adds the lib prefix). So you only need to have -lchaiscript_stdlib-5.3.1 and the linker will find it.

You can also skip the adding of the path, and link directly with the file:

clang++ Main.cpp -o foo libchaiscript_stdlib-5.3.1.so

Note that the runtime linker (which is what actually loads the shared libraries when you run your program) might not be able to find the library if it's not in the runtime linker's path. You can tell the (compile time) linker to add a path to the shared-library path in the generated program though:

clang++ Main.cpp -o foo libchaiscript_stdlib-5.3.1.so -Wl,-rpath,/absolute/path

The -Wl option tells the compiler front-end to pass an option to the linker, and the linker option -rpath adds a path to the runtime-linker search path.

Share:
31,311
Admin
Author by

Admin

Updated on December 31, 2020

Comments

  • Admin
    Admin over 3 years

    I keep getting

    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)
    

    When trying to link to a .so file.

    I'm using this command:

    clang++ Main.cpp -o foo -L./ -lchaiscript_stdlib-5.3.1.so
    

    What am I doing wrong?

    File libchaiscript_stdlib-5.3.1.so is in the same directory as file Main.cpp. I thought the -L./ would add the .so to the library search paths.

  • Searene
    Searene over 5 years
    What's the difference between -L and -rpath? Seems to me that both are used to specify library paths.
  • Some programmer dude
    Some programmer dude over 5 years
    @Searene -L adds to the build-time linker path. -rpath adds to the load-time library path (when the OS loads the library).