g ++

时间:2018-03-16 20:37:30

标签: g++

我正在使用其他人的makefile并在尝试编译exe的'静态'版本时遇到麻烦

我打印出了makefile的规则,错误是这样的:

g++ Main.or System.or Options.or -Wall -lz --static -o main
/usr/bin/ld: cannot find -lz
/usr/bin/ld: cannot find -lstdc++
/usr/bin/ld: cannot find -lm
/usr/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status

如果我在上面的命令中没有包含'--static'选项,它可以正常工作。

makefile还有生成静态lib的规则:

ar -rcsv lib_release.a  Main.or System.or Options.or
r - Main.or
r - System.or
r - Options.or
Making Soft Link: lib_release.a -> lib.a
ln -sf lib_release.a lib.a

1 个答案:

答案 0 :(得分:1)

-static链接选项指示链接器忽略所有共享 可以解析libname.so链接选项的libaries(-lname)(两者都是显式的 并且默认)并且只接受静态库(libname.a)。您已安装共享库 您的系统满足-lz-lstdc++-lm-lc但不包含静态系统。

要使您的链接按原样工作,您必须安装静态库:

  • libz.a(压缩库)
  • libstdc++.a(标准C ++库)
  • libm.a(数学图书馆)
  • libc.a标准C库

通过适合您的发行版的方法。