问题
When I link a library such as libm in with ld, I need to drop the lib prefix. What if the file does not follow this naming convention? Is there a way to link it other than renaming the file?
回答1:
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.
回答2:
You can have the linker search for a library named without the lib prefix:
gcc main.o -L/path/to/foo -l:foo.a
This is especially useful in environments where a list of libraries is specified and the -l flag is prepended later (eg some makefiles or eclipse CDT)
来源:https://stackoverflow.com/questions/10234208/how-do-i-link-a-library-file-in-gcc-that-does-not-start-with-lib