简体   繁体   中英

g++ only looks for .lib files

I am using Windows 10 with mingw-w64. I tried compiling a program with a statically linked library. I used this command: g++ main.cpp -Llibs/ -lfoo . But MinGW says it can't find the library files, so I tried renaming foo.a to foo.lib and voila, the compiler found foo.lib . Why doesn't MinGW see *.a files anymore?

From the documentation :

when ld is called with the argument '-lxxx' it will attempt to find, in the first directory of its search path,

  • libxxx.dll.a
  • xxx.dll.a
  • libxxx.a
  • xxx.lib
  • libxxx.lib
  • cygxxx.dll
  • libxxx.dll
  • xxx.dll

Alternatively, you can pass libs/foo.a directly as an argument to g++ .

The problem is that mingw will not look for <libname>.a files because it does not expect them to exist.

From the docs:

MinGW supports libraries named according to the ".lib" and ".dll" conventions, in addition to the normal "lib.a" convention common on *nix systems

This is because windows does not use the lib prefix for its libraries in the same way that *nix does (on windows a shared library foo would be foo.dll and on *nix it would be libfoo.so ). I am not sure how you managed to get a .a missing the lib prefix (unless you renamed it) but your .a files should have a lib prefix in them (when specifying this you omit the lib part so libfoo.a becomes -lfoo )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM