6

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

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

4

3 回答 3

12

编译器错误意味着编译器无法将您提供的源代码转换为目标代码。这通常意味着您自己的程序中存在语法或语义错误,您必须在程序表现出您希望它具有的行为之前解决该错误。

链接器错误意味着链接器无法从您提供的目标代码构建可执行程序。这通常意味着您的程序没有正确地与它自己的依赖项或与外部世界(例如外部库)交互。

于 2013-02-18T23:17:50.360 回答
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
于 2013-02-19T01:27:25.970 回答
1

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

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

于 2013-02-18T23:20:53.323 回答