Erro de linker c ++: referências indefinidas somente na compilação otimizada
Estou recebendo um erro de vinculador de referências indefinidosó ao vincular arquivos de objetos otimizados,não ao vincular arquivos de objetos não otimizados. Eu não entendo o que o problema é ou poderia ser.
Aqui está minha compilação não otimizada:
Building file: ../COMPASS.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"COMPASS.d" -MT"COMPASS.d" -o"COMPASS.o" "../COMPASS.cpp" Finished building: ../COMPASS.cpp Building file: ../PSA.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"PSA.d" -MT"PSA.d" -o"PSA.o" "../PSA.cpp" Finished building: ../PSA.cpp Building file: ../SAR.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"SAR.d" -MT"SAR.d" -o"SAR.o" "../SAR.cpp" Finished building: ../SAR.cpp Building file: ../constraints.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"constraints.d" -MT"constraints.d" -o"constraints.o" "../constraints.cpp" Finished building: ../constraints.cpp Building file: ../genetic.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"genetic.d" -MT"genetic.d" -o"genetic.o" "../genetic.cpp" Finished building: ../genetic.cpp Building file: ../globals.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"globals.d" -MT"globals.d" -o"globals.o" "../globals.cpp" Finished building: ../globals.cpp Building file: ../logging.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"logging.d" -MT"logging.d" -o"logging.o" "../logging.cpp" Finished building: ../logging.cpp Building file: ../main.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"main.d" -MT"main.d" -o"main.o" "../main.cpp" Finished building: ../main.cpp Building file: ../sampling.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"sampling.d" -MT"sampling.d" -o"sampling.o" "../sampling.cpp" Finished building: ../sampling.cpp Building file: ../simulation1.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"simulation1.d" -MT"simulation1.d" -o"simulation1.o" "../simulation1.cpp" ../globals.h: At global scope: ../globals.h:43: warning: inline function 'double showDecimals(const double&, const int&)' used but never defined Finished building: ../simulation1.cpp Building file: ../test_function.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -pg -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"test_function.d" -MT"test_function.d" -o"test_function.o" "../test_function.cpp" Finished building: ../test_function.cpp Building target: pc2 Invoking: GCC C++ Linker g++ -pg -fopenmp -pg -o"pc2" ./COMPASS.o ./PSA.o ./SAR.o ./constraints.o ./genetic.o ./globals.o ./logging.o ./main.o ./sampling.o ./simulation1.o ./test_function.o Finished building target: pc2
Aqui está minha build otimizada:
Building file: ../COMPASS.cpp Invoking: GCC C++ Compiler g++ -O3 -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"COMPASS.d" -MT"COMPASS.d" -o"COMPASS.o" "../COMPASS.cpp" Finished building: ../COMPASS.cpp Building file: ../PSA.cpp Invoking: GCC C++ Compiler g++ -O3 -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"PSA.d" -MT"PSA.d" -o"PSA.o" "../PSA.cpp" Finished building: ../PSA.cpp Building file: ../SAR.cpp Invoking: GCC C++ Compiler g++ -O3 -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"SAR.d" -MT"SAR.d" -o"SAR.o" "../SAR.cpp" Finished building: ../SAR.cpp Building file: ../constraints.cpp Invoking: GCC C++ Compiler g++ -O3 -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"constraints.d" -MT"constraints.d" -o"constraints.o" "../constraints.cpp" Finished building: ../constraints.cpp Building file: ../genetic.cpp Invoking: GCC C++ Compiler g++ -O3 -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"genetic.d" -MT"genetic.d" -o"genetic.o" "../genetic.cpp" Finished building: ../genetic.cpp Building file: ../globals.cpp Invoking: GCC C++ Compiler g++ -O3 -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"globals.d" -MT"globals.d" -o"globals.o" "../globals.cpp" Finished building: ../globals.cpp Building file: ../logging.cpp Invoking: GCC C++ Compiler g++ -O3 -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"logging.d" -MT"logging.d" -o"logging.o" "../logging.cpp" Finished building: ../logging.cpp Building file: ../main.cpp Invoking: GCC C++ Compiler g++ -O3 -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"main.d" -MT"main.d" -o"main.o" "../main.cpp" Finished building: ../main.cpp Building file: ../sampling.cpp Invoking: GCC C++ Compiler g++ -O3 -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"sampling.d" -MT"sampling.d" -o"sampling.o" "../sampling.cpp" Finished building: ../sampling.cpp Building file: ../simulation1.cpp Invoking: GCC C++ Compiler g++ -O3 -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"simulation1.d" -MT"simulation1.d" -o"simulation1.o" "../simulation1.cpp" ../globals.h: At global scope: ../globals.h:43: warning: inline function 'double showDecimals(const double&, const int&)' used but never defined Finished building: ../simulation1.cpp Building file: ../test_function.cpp Invoking: GCC C++ Compiler g++ -O3 -Wall -c -fmessage-length=0 -Wno-sign-compare -fopenmp -MMD -MP -MF"test_function.d" -MT"test_function.d" -o"test_function.o" "../test_function.cpp" Finished building: ../test_function.cpp Building target: pc2 Invoking: GCC C++ Linker g++ -fopenmp -o"pc2" ./COMPASS.o ./PSA.o ./SAR.o ./constraints.o ./genetic.o ./globals.o ./logging.o ./main.o ./sampling.o ./simulation1.o ./test_function.o ./logging.o: In function `LOG_COMPASS_display_points_MATLAB(int const&, VisitedSet&)': logging.cpp:(.text+0x686): undefined reference to `VisitedSet::getSize()' collect2: ld returned 1 exit status make: *** [pc2] Error 1 make: Leaving directory `/home/djunderw/ncsu/workspace/pc2/release'
Alguma ideia?
[PROBLEMA FIXO COM FUNÇÃO showDecimals ()]
O arquivo COMPASS.h inclui este modelo de classe:
template<class T> class VisitedSet {
public:
VisitedSet(const T& soln);
int getSize();
void addSolution(const T& soln);
void evaluate();
void sample(const int& numNewSolutions, Constraints& space);
void CSBiased_generateDistribution();
void constructMPA(Constraints& space);
vector<T> vec;
double bestValue;
int bestIndex;
/* used to implement biased coordinate sampling */
double CSBiased_coefficient;
vector< vector<double> > lastSampledPoints;
vector<int> lastSampledPointsIndex;
vector< vector<double> > newSampledPoints;
vector<int> newSampledPointsIndex;
vector<double> CSBiased_distribution;
private:
int iteration;
int dimension;
int SAR(); // simulation allocation rule
};
E o COMPASS.cpp inclui o seguinte código:
template<class T>
int VisitedSet<T>::getSize() {
return vec.size();
}
Os arquivos logging.cpp incluem o seguinte código:
#include "COMPASS.h"
void LOG_COMPASS_display_points_MATLAB(const int& iteration, VisitedSet<Policy>& visited) {
cout << "points{"<<iteration+1<<"} = [\n"
<< visited.vec[visited.bestIndex].x[0] << "\t" << visited.vec[visited.bestIndex].x[1] << "\t" << visited.vec[visited.bestIndex].meanQALY() << ";" << endl;
for(int i=0; i<visited.getSize(); i++) {
if(i != visited.bestIndex)
cout << visited.vec[i].x[0] << "\t" << visited.vec[i].x[1] << "\t" << visited.vec[i].meanQALY() << ";" << endl;
}
cout << "];\n";
}