lIm*_*bus 15 c++ makefile g++ ld
我知道这表明链接器问题,主要是未解析的符号.我知道要解决这个问题/摆脱那个错误消息,就必须提供更多的信息.我知道有很多关于解决这个问题的问题.
我的问题旨在帮助理解make和ld,找出什么(以及谁)试图用这条线表达什么.
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
小智 22
首先,您需要知道命令行程序命名gcc并且g++只是围绕实际预处理器/解析器 - 编译器/汇编器/链接器命令的伞(包装器).他们真正的名字是cpp,cc1或者cc1plus,as和ld分别.GCC有助于统一它们的使用,命令行界面并为它们提供一组有意义的默认(和必需)动作.例如,使用ld直接链接二进制文件非常困难 - 如果ld未运行所有20+(IIRC)正确选项,则它无法正常工作.
既然你知道,你可以看到:
这是否意味着我正在使用ld?我配置了我的项目/ Makefile,以便g ++应该进行链接,那么为什么LD仍然参与其中
它意味着你调用GCC但反过来调用LD.GCC本身一无所知 - 既不编译,也不知道链接,因为它只是一个包装器.(去做一下wc -c,/usr/bin/gcc感到惊讶的是它只有几千字节!现在也做同样的事情/usr/libexec/gcc/cc1plus,找出可怕的事实:它是几个10兆的大!)
"collect2:"是什么意思?这是一个调用的步骤吗?我在我的系统上找不到具有该名称的可执行文件.
Collect2也是gcc和ld之间的另一个间接层.更多关于它的官方网站.
谁在写这个消息?做?ld?g ++?
要么是g ++(就我所知而言)或者collect2它本身.
是否有可能的退出代码列表?
意思是传统的 - 零意味着成功,非零意味着失败.如果存在详尽的列表,则应该能够通过调用来查看它man ld.