小编Hen*_*cer的帖子

QtCreator多定义构建错误

这是我的.pro文件:

QT       += core gui widgets

TARGET = link_mult_def

TEMPLATE = app

SOURCES +=  main.cpp \
            path2/file.cpp \
            path1/file.cpp

HEADERS +=
Run Code Online (Sandbox Code Playgroud)

出于某种原因,QtCreator在从.cpp文件构建.o文件时不尊重源文件夹结构.这两个文件都将编译为"shadow_build_directory/file.o".我希望构建过程在shadow构建目录中创建path1和path2目录,并将"path1/file.cpp"编译为"shadow_build_directory/path1/file.o",将"path2/file.cpp"编译为"shadow_build_directory/path2 /" file.o".

由于来自两个来源的编译符号在文件中加起来,因此它还不是一个大问题.当QtCreator尝试链接时,它成为一个大问题:

g++ -Wl,-O1 -o link_mult_def main.o file.o file.o -L/usr/lib/x86_64-linux-gnu -lQtCore -lpthread
Run Code Online (Sandbox Code Playgroud)

QtCreator链接file.o两次,这使得链接器失败并出现多个定义错误.

如何确保QtCreator编译为反映源目录结构的目标文件?

谢谢

编辑:

路径1/file.cpp

#include <iostream>
void function1()
{
    std::cout << "function1" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

路径2/file.cpp

#include <iostream>
void function2()
{
    std::cout << "function2" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

QtCreator的构建过程:

g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I../link_mult_def -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui …
Run Code Online (Sandbox Code Playgroud)

c++ linker multiple-definition-error qt-creator

11
推荐指数
1
解决办法
4467
查看次数