Я пытаюсь скомпилировать многофакторный бит кода, который до сих пор работал нормально. Но теперь я получаю некоторые ошибки компоновщика. У меня есть определение класса «njPhaseSpace», который, как сообщалось,:Ссылка в mac os x (10.8)
ld: duplicate symbol njPhaseSpace::njPhaseSpace(int)in Source/Currents.o and
/var/folders/p8/0bwv51kn2w5cx4jnsg6xm7340000gn/T//ccb0Psoz.o for architecture x86_64
Я понятия не имею, что файл /var/folder/.../ccb0Psoz.o о и это разве (намеренно) начинают использоваться в моем проекте. , если я изменю имя на что-то другое - но похожее - например, njPhaseSpaceX, он скомпилирует и свяжет штраф. Но затем я очищаю проект, используя «make clean», и когда я пытаюсь переделать, я снова получаю ту же ошибку ссылки! (но с другим файлом /var/.../XXXXX.o.) Любые предложения? Cheers
UPDATE: Более странные вещи: Когда я смотрю в каталоге/var/folder/..., чтобы увидеть, какой файл вызывает дублирование, такой файл не существует!
UPDATE: Исходный файл njPhaseSpace является:
// Standard header files
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <vector>
#include <stdio.h>
#include <math.h>
#include <complex>
#include <iomanip>
#include "LoadBar.h"
// CLHEP header files
#include <CLHEP/Vector/LorentzVector.h>
#include <CLHEP/Random/RanluxEngine.h>
// More convenient label for four-vectors
typedef CLHEP::HepLorentzVector HLV;
// Definition of structure to hold the phase-space point
struct ParticleStruct {
HLV pa;
HLV pb;
HLV pep;
HLV pem;
HLV p1;
HLV p2;
HLV p3;
double xa;
double xb;
} ;
// A class for the n-jet phase space
class njPhaseSpace {
private:
// Incoming Particle Momenta
HLV pa;
HLV pb;
// Emitted leptons
HLV pep;
HLV pem;
// Outgoing parton momenta
std::vector <HLV> OutgoingPartons;
// Kinematic factors
double xa;
double xb;
public:
// Constructor for class
njPhaseSpace(int n);
// Returns a vector of the outgoing parton momenta
std::vector <HLV> ReturnOutgoingPartons() {
return OutgoingPartons;
}
// HLV IncomingForward
} ;
// Class constructor - adds n vectors to the Outgoing array
njPhaseSpace::njPhaseSpace(int n) {
// Add n final states to the OutgoingPartons vector
for (int i = 0; i < n; i++) {
HLV temp;
OutgoingPartons.push_back(temp);
}
}
UPDATE: Эта проблема уходит, когда конструктор класса входит в тело определения класса. В то время как это хорошо, я могу избежать этого, он действительно не помогает, потому что теперь, чтобы развить свой класс, все должно будет сидеть внутри определения.
ОБНОВЛЕНИЕ: Makefile используется для компиляции (анализ является то, что индивидуальный я в настоящее время работает сделать Проводник -j8):
#/bin/bash
# CXX Compiler
CXX = g++
# Directories For Compilation
INCDIR = MadGraph
LIBDIR = MadGraph
SRCDIR = Source
# Compilation Flags
CXXFLAGS = -O3 -lm
LIBFLAGS = $(shell clhep-config --libs) $(shell fastjet-config --libs) $(shell clhep-config --libs) $(shell root-config --libs)
INCFLAGS = $(shell clhep-config --include) -I/$(INCDIR) -I$(SRCDIR) -I. $(shell fastjet-config --cxxflags --plugins) $(shell clhep-config --libs) $(shell root-config --cflags)
FLAGS = $(CXXFLAGS) $(LIBFLAGS) $(INCFLAGS)
# Object Files
Objects = $(addprefix $(SRCDIR)/, Currents.o mstwpdf.o LoadBar.o)
MadObjects = $(addprefix $(LIBDIR)/, HelAmps_sm.o Parameters_sm.o read_slha.o CPPProcess2j.o CPPProcess3j.o)
# Main targets
all: Analysis Explorer
Analysis: $(SRCDIR)/Analysis2jepem.cxx $(Objects) $(SRCDIR)/CGenerator2jepem.o
$(CXX) $(SRCDIR)/Analysis2jepem.cxx -o [email protected] $(FLAGS) $(Objects) $(SRCDIR)/CGenerator2jepem.o
Explorer: $(SRCDIR)/qQepemqQ_Explorer.cxx $(Objects) $(MadObjects) $(LIBDIR)/libmodel_sm.a
$(CXX) $(SRCDIR)/qQepemqQ_Explorer.cxx -o [email protected] $(FLAGS) $(Objects) -lmodel_sm -L$(LIBDIR)
# Build object files
$(Objects):
$(CXX) -c $(@:.o=.cxx) -o [email protected]
# Build the MG5 object code
$(MadObjects):
$(CXX) -c $(@:.o=.cxx) -o [email protected] -I../
$(SRCDIR)/CGenerator2jepem.o:
$(CXX) -c $(@:.o=.cxx) -o [email protected]
# Build the Standard Model library
$(LIBDIR)/libmodel_sm.a: $(MadObjects)
$(AR) cru [email protected] $^
ranlib [email protected]
# Debugging flags
debug: CXX += -g -Wall -pendantic
debug: all
# Create a clean build
.PHONY: clean
clean:
rm -f $(Objects) $(MadObjects) $(LIBDIR)/2j/libmodel_sm.a $(LIBDIR)/3j/libmodel_sm.a $(TARGET) $(SRCDIR)/CGenerator2jepem.o Analysis Explorer
Показать исходный файл 'njPhaseSpace'. – trojanfoe
См. Выше @trojanfoe – JMzance
Я не вижу 'njPhaseSpace :: njPhaseSpace (int)' в этом файле. – trojanfoe