यह मेरा .pro फ़ाइल है:QtCreator कई परिभाषा निर्माण बग
QT += core gui widgets
TARGET = link_mult_def
TEMPLATE = app
SOURCES += main.cpp \
path2/file.cpp \
path1/file.cpp
HEADERS +=
किसी कारण से, QtCreator जब सीपीपी फाइलों से ओ फ़ाइलों के निर्माण के स्रोत फ़ोल्डर संरचना सम्मान नहीं करता। दोनों फाइलों को "shadow_build_directory/file.o" में संकलित किया जाएगा। मैं निर्माण प्रक्रिया को छाया निर्माण निर्देशिका में पथ 1 और पथ 2 निर्देशिका बनाने और "path1/file.cpp" को "shadow_build_directory/path1/file.o" और "path2/file.cpp" को "shadow_build_directory/path2/file.o "।
चूंकि दोनों स्रोतों से संकलित प्रतीक फ़ाइल में जोड़ते हैं। इसलिए यह अभी तक इतनी बड़ी समस्या नहीं है।
g++ -Wl,-O1 -o link_mult_def main.o file.o file.o -L/usr/lib/x86_64-linux-gnu -lQtCore -lpthread
QtCreator लिंक दो बार जो लिंकर एकाधिक परिभाषा त्रुटि के साथ विफल बनाता file.o: जब QtCreator लिंक की कोशिश करता है यह एक बड़ी समस्या बन जाता है।
मैं कैसे सुनिश्चित कर सकता हूं कि QtCreator उन स्रोतों को ऑब्जेक्ट करने के लिए संकलित करता है जो स्रोत निर्देशिका संरचना को प्रतिबिंबित करते हैं?
धन्यवाद
संपादित करें:
path1/असम्भव
#include <iostream>
void function1()
{
std::cout << "function1" << std::endl;
}
Path2/असम्भव
#include <iostream>
void function2()
{
std::cout << "function2" << std::endl;
}
प्रक्रिया बिल्ड 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 -I/usr/include/qt4 -I. -I../link_mult_def -I. -o main.o ../link_mult_def/main.cpp
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 -I/usr/include/qt4 -I. -I../link_mult_def -I. -o file.o ../link_mult_def/path1/file.cpp
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 -I/usr/include/qt4 -I. -I../link_mult_def -I. -o file.o ../link_mult_def/path2/file.cpp
g++ -Wl,-O1 -o link_mult_def main.o file.o file.o -L/usr/lib/x86_64-linux-gnu -lQtGui -lQtCore -lpthread
file.o: In function `function2()':
file.cpp:(.text+0x0): multiple definition of `function2()'
make: Leaving directory `/home/schmid/code/misc/trash/link_mult_def-build-desktop-Qt_4_8_1_in_PATH__System__Release'
file.o:file.cpp:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
make: *** [link_mult_def] Error 1
असल में यह QtCreator है जो qmake का उपयोग करता है। मैं qmake करने के लिए कुछ भी नहीं बताओ। मैं बस अपनी परियोजना में स्रोत फाइलें जोड़ता हूं। मुझे अपने निष्पादन योग्य बनाने के लिए सभी फाइलों की आवश्यकता है। लेकिन जब मैं परियोजना का निर्माण करता हूं तो यह विफल रहता है। – HenrySpencer
मुझे पूरा यकीन है कि स्रोत कोड ठीक है। यह QtCreator के साथ एक समस्या है। जैसा कि आप देख सकते हैं कि दोनों स्रोत फ़ाइलों को एक ही ऑब्जेक्ट फ़ाइल में संकलित किया गया है जो लिंकर कॉल में दो बार दिखाई देता है। जो mutliple परिभाषा त्रुटि की ओर जाता है। मुझे नहीं पता कि अलग ऑब्जेक्ट फ़ाइलों को संकलित करने के लिए QtCreator को कैसे बताना है। – HenrySpencer
इसके बारे में क्षमा करें, मैंने नहीं देखा था कि आपने उपनिर्देशिका में एक ही फ़ाइल नाम का उपयोग किया था ... शोर के लिए खेद है। – Mat