编译器错误与链接器错误?

时间:2013-02-18 23:14:54

标签: c++ c compiler-construction linker

只是阅读Effective C ++并且他提到了几次“链接器错误”,而不是编译器错误。

什么构成“链接器错误”,它们与“编译器错误”有什么不同?基于一组类别的规则/解释是否在逻辑上记住了这一点?

3 个答案:

答案 0 :(得分:9)

编译器错误意味着编译器无法将您提供的源代码翻译成目标代码。它通常意味着您在自己的程序中遇到语法或语义错误,在程序显示您希望它具有的行为之前必须解决这个错误。

链接器错误表示链接器无法从您提供的对象代码构建可执行程序。它通常意味着您的程序无法与其自身的依赖关系或外部世界(例如外部库)正确连接。

答案 1 :(得分:1)

编译器错误是与编译期间代码语义相关的错误类,即将源转换为目标文件的过程。在这里,您可能已经定义了某些假定可用的符号(例如pthread_create)。

链接器错误是在创建最终目标文件期间验证这些依赖项时遇到的错误。按照上面的示例,为了创建可执行文件,您需要pthread_create的定义,如果找不到则会给出链接器错误。

答案 2 :(得分:1)

gcc -c编译并且不链接:

   -c  Compile or assemble the source files, but do not link.  The linking
       stage simply is not done.

您可以编译文件,然后将其与-o

相关联
$ gcc -c hello.s
$ gcc -o test hello.o 
$ ./test 
Hi World