Is Lib{Library Name}.A/.So a Naming Convention for Static Libraries in Linux

Is lib{library name}.a / .so a naming convention for static libraries in Linux?

You can name one any way you want, but ld's -l assuming a lib prefix applies to both static and shared libraries and goes back a long way; you'd need to name it explicitly to use one without the lib prefix.

This is actually useful even on modern systems: a name libfoo.so can be identified as a link-time library, while foo.so indicates a shared object implementing a runtime plugin. Or subsystem-specific prefixes in place of lib to identify plugins for particular subsystems; see for example pam_*.so and nss_*.so.

Is lib{library name}.a / .so a naming convention for static libraries in Linux?

You can name one any way you want, but ld's -l assuming a lib prefix applies to both static and shared libraries and goes back a long way; you'd need to name it explicitly to use one without the lib prefix.

This is actually useful even on modern systems: a name libfoo.so can be identified as a link-time library, while foo.so indicates a shared object implementing a runtime plugin. Or subsystem-specific prefixes in place of lib to identify plugins for particular subsystems; see for example pam_*.so and nss_*.so.

What is proper naming convention for MSVC dlls, static libraries and import libraries

You distinguish between a library and a .dll by the extension. But you distinguish between a import library and a static library by the filename, not the extension.

There will be no case where an import library exists for a set of code that was built to be a static library, or where a static library exists for a dll. These are two different things.

There is no single MSVC standard filename convention. As a rule, a library name that ends in "D" is often a debug build of library code, msvcrtd.dll vs msvcrt.dll but other than that, there are no standards.

/usr/bin/ld: cannot find -lliburing

You can fix this error by replacing -lliburing with -luring

gcc liburing-test.c -o liburing-test -luring

Is lib{library name}.a / .so a naming convention for static libraries in Linux?

what is the difference between .so and .a files?

But it appears that even .a is shared library

Nope, it's a static library.

and can be used just like a .so lib

If you mean linking to it, then yes. But you can't dlopen() an .a file which you could do with an .so file.

You can always ask our old friend Uncle G to answer your questions.

How do I link a library file in GCC that does not start with lib?

You can link against any library, e.g. foo.a, by specifying full path to it on the link line:

gcc main.o /path/to/foo.a

What you lose with non-standard library name is the ability for the linker to search for it, e.g. this will not work:

gcc main.o -L/path/to foo.a

You can avoid that lack of search by using -l:foo.a syntax:

gcc main.o -L/path/one -L/path/two -l:foo.a

When I link a library such as libm in with ld

Note that in general you should not link anything with ld. Use the compiler driver instead -- it adds objects and libraries to the link line that are required for correct result.

How to link using GCC without -l nor hardcoding path for a library that does not follow the libNAME.so naming convention?

There is the ":" prefix that allows you to give different names to your libraries.
If you use

g++ -o build/bin/myapp -l:_mylib.so other_source_files

should search your path for the _mylib.so.



Related Topics



Leave a reply



Submit