昨天在调试程序的时候出现了“LNK 2019无法解析的外部符号”的问题(VS2008),依照网上说的方法都没有解决这个问题,最后在项目文件里发现有两个同名的可是不在同一个目录下的cpp文件,而产生LNK错误的cpp文件里有对这个重名文件的引用,结果导致了当中一个cpp文件产生的目标文件(obj)覆盖了真正须要的cpp产生的OBJ文件,导致链接的时候找不到指定的符号而出现了链接错误。
以下给个图说明一下我遇到的情况吧:
在项目中。同一时候包括了目录1和目录2中的全部cpp文件,而ref.cpp须要调用的函数是目录2中a.cpp中函数add,也就是途中红色是引用的函数。
情况一:当目录1中的a.cpp先于目录2中的a.cpp被编译,这样调用没有问题,ref.cpp可以找到add函数。目标文件a.obj中有add函数,没有Max函数
情况二:当目录1中的a.cpp比目录2中的a.cpp被编译的话。ref.cpp就无法找到add函数。由于暂时目录中的a.obj被目录一中的a.cpp生成的目标文件给替换了,目标文件a.obj中有Max函数。没有add函数
情况二会出现LNK 2019无法解析的外部符号的链接错误。改一下a.cpp的名称或者改一下编译顺序就能解决这个问题,最好该名称。
时间: 2024-10-18 15:57:04