My project requires linking
-lmand I tried importinglibm%lib{m}but then I get strange errors like there not being a static variant available.
System libraries like -lm and -ldl (which are essentially extensions of
libc) or Windows Platform SDK libraries like advapi32.lib and ws2_32.lib
should not be imported. Instead, you should list them in the *.libs
variables (c.libs, cxx.libs, or cc.libs). For example:
if ($c.target.class != 'windows')
c.libs += -lm
Or:
if ($cxx.target.class == 'windows')
{
if ($cxx.target.system == 'mingw32')
cxx.libs += -ladvapi32
else
cxx.libs += advapi32.lib
}
If a system library is an interface dependency of your library (see Library
Exportation and Versioning for background), then it should also be
listed in *.export.libs, for example:
if ($c.target.class != 'windows')
{
c.libs += -lm
lib{hello}: c.export.libs = -lm
}
Note that for a binless (header-only or module interface-only) library you
still need to list the system library in *.libs in addition to
*.export.libs. See How do I make a header-only C/C++ library?
for details.
See also How do I link the pthread library?