我正在尝试使用测试库的静态版本来源构建.我有libtest.a和libtest.so可用,所以我使用"-static"选项.但是,看起来gcc链接器也试图搜索标准数学库的静态版本.知道我可以使用什么选项来链接标准库的共享版本吗?
g++ -static main.cpp -o a.out -L. -ltest
Run Code Online (Sandbox Code Playgroud)
错误:
/usr/bin/ld: cannot find -lm
Run Code Online (Sandbox Code Playgroud)
如果要强制链接器使用特定库的静态版本,可以使用:filename强制特定库而不是仅为链接器提供"基本"库名,并让它使用它找到的第一个库名:
g++ main.cpp -o a.out -l:./libtest.a
Run Code Online (Sandbox Code Playgroud)
来自http://sourceware.org/binutils/docs-2.23.1/ld/Options.html:
Run Code Online (Sandbox Code Playgroud)-l namespec --library=namespec将指定的存档或目标文件添加
namespec到要链接的文件列表中.此选项可以使用任意次.如果namespec是形式:filename,ld将在库路径中搜索被调用的文件filename,否则它将在库路径中搜索一个名为的文件libnamespec.a.在支持共享库的系统上,ld也可以搜索除以外的文件
libnamespec.a.具体来说,在ELF和SunOS系统上,ld将libnamespec.so在搜索被调用的库之前在目录中搜索所调用的库libnamespec.a.(按照惯例,.so扩展名表示共享库.)请注意,此行为不适用于:filename,它始终指定一个名为的文件filename.