Qt 使用qmake 遇到 warning LNK4042: object specified more than once; extras ignored 错误的处理办法
2012-04-30 15:14
1231 查看
当同一个工程下出现两个文件名相同的cpp文件而又没办法修改文件名时,编译器链接时会报错链接错误 lnk:4042 对于qt的工程该如何解决呢?
网上有种说法:
在工程pro中加入 CONFIG
+= object_with_source
object_with_source
— outputs each object file into the same directory its source file came from,
http://www.qtcentre.org/wiki/index.php?title=Undocumented_qmake
尝试了下好像没效果。(它的意图是在源文件夹中生成obj文件,继而链接不同路径下的obj文件 )
另外还有种方法:
1、修改obj文件名,使用Qt的pro时要达到目的就需要修改Makefile文件
由于Qt的pro工程中并没有提供修改obj文件名的方法,所以可以通过修改qmake的源码来实现目的
修改qmake\generators\makefile.cpp
只要达到目的就可以了。
2、然后就是qmake的编译,给出一个简单的批处理
3、这还不够另外还要使用Qt的另一个未公开CONFIG :no_batch
在pro工程中加入 CONFIG+=no_batch
网上有种说法:
在工程pro中加入 CONFIG
+= object_with_source
object_with_source
— outputs each object file into the same directory its source file came from,
http://www.qtcentre.org/wiki/index.php?title=Undocumented_qmake
尝试了下好像没效果。(它的意图是在源文件夹中生成obj文件,继而链接不同路径下的obj文件 )
另外还有种方法:
1、修改obj文件名,使用Qt的pro时要达到目的就需要修改Makefile文件
由于Qt的pro工程中并没有提供修改obj文件名的方法,所以可以通过修改qmake的源码来实现目的
修改qmake\generators\makefile.cpp
QStringList MakefileGenerator::createObjectList(const QStringList &sources) { QStringList ret; QString objdir; if(!project->values("OBJECTS_DIR").isEmpty()) objdir = project->first("OBJECTS_DIR"); QStringList fileNames; for(QStringList::ConstIterator it = sources.begin(); it != sources.end(); ++it) { QFileInfo fi(fileInfo(Option::fixPathToLocalOS((*it)))); QString dir; if(objdir.isEmpty() && project->isActiveConfig("object_with_source")) { QString fName = Option::fixPathToTargetOS((*it), false); int dl = fName.lastIndexOf(Option::dir_sep); if(dl != -1) dir = fName.left(dl + 1); } else { dir = objdir; } QString baseName = fi.completeBaseName(); while(fileNames.indexOf(baseName) != -1) baseName+="_"; fileNames.push_back(baseName); ret.append(dir + baseName + Option::obj_ext); } return ret; }
只要达到目的就可以了。
2、然后就是qmake的编译,给出一个简单的批处理
@rem 将该文件放到QT源文件根目录,注意在vs运行环境下执行该批处理 @rem 如果存在src\corelib\global\qconfig.cpp 可以不用configure命令 @rem 复制qmake下的Makefile.win文件为Makefile ,添加下面几句话到文件头 @rem QMAKESPEC=win32-msvc2008 @rem QT_VERSION=4.8.0 @rem QMAKE_OPENSOURCE_EDITION = yes @rem 进入qmake目录 执行nmake if not EXIST "src\corelib\global\qconfig.cpp" ( echo 当生成qmake后即可手动停止 configure -platform win32-msvc2008 -debug-and-release -fast -opensource -confirm-license goto end; ) if not EXIST "qmake\Makefile" ( echo 看提示 goto end; ) cd qmake nmake /f Makefile cd .. :end
3、这还不够另外还要使用Qt的另一个未公开CONFIG :no_batch
在pro工程中加入 CONFIG+=no_batch
相关文章推荐
- warning LNK4042: The same object file was specified more than once
- 使用SQLDMO备份数据库时遇到的错误及处理办法
- webview使用遇到 It is possible that this object was over-released, or is in the process of deallocation错误的解决办法
- iOS--错误集锦--pushing the same view controller instance more than once is not supperted
- Matlab报错BLAS loading error: dlopen: cannot load any more object with static TLS处理办法
- 解决“certificateidentity 'iphone distribution' appears more than once”错误
- [Android]使用ProGuard遇到“conversion to Dalvik format failed with error 1”错误的解决办法
- myeclipse中遇到tomcat jdk name错误处理的办法(zz)
- 用myeclipse中遇到tomcat jdk name错误处理的办法
- 使用net.sf.json包提供的JSONObject.toBean方法时,日期转化错误解决办法
- sql server和Navicat使用遇到错误解决办法
- Column specified more than once in the INSERT list.
- Spring AOP报错处理 Can not set field to $Proxy 在spring中使用事物或AOP遇到的错误
- 使用OSGI内嵌的jetty进行web开发时:遇到no suitable log constructor错误解决办法
- 使用Oracle SQL Developer连接数据库时,提示“执行请求的操作时遇到错误:IO 错误: The Network Adapter could not establish”,不知如何处理
- PHP5.1以上版本使用Date函数时遇到警告的处理办法
- 使用C# + Xamarin开发应用-- 使用json.net 遇到错误 Object non reference
- ruby on rails 的使用过程中,遇到的错误及解决办法
- 使用git commit命令时遇到 fatal: Unable to create index.lock File exists 错误的解决办法
- 使用devstack安装openstack过程中遇到的一些错误及解决办法