qq_pp
December 6, 2022, 10:41pm
1
___ Hi,
When run my root program in VS2022, it’s faild, because I want to save branch of vector into one tree. But the same code can run in linux. Can you help me? Thank you very much!
my code is following:
#include
#include <TFile.h>
#include <TNtuple.h>
#include <TH2.h>
#include <TProfile.h>
#include <TCanvas.h>
#include <TFrame.h>
#include <TROOT.h>
#include <TSystem.h>
#include <TRandom3.h>
#include <TBenchmark.h>
#include <TInterpreter.h>
#pragma comment (lib, “libCore.lib”)
#pragma comment (lib, “libTree.lib”)
#pragma comment (lib, “libRIO.lib”)
#pragma comment (lib, “libHist.lib”)
//#include <windows.h>
using namespace std;
int main() {
//gInterpreter->GenerateDictionary(“vector”, “vector”);
// gInterpreter->GenerateDictionary(“vector”, “vector”);
std::vector<Int_t> waveform;
int pp[10];
/*
for (int j = 0; j < 10; j++) {
waveform.push_back(j);
}
for (int j = 0; j < waveform.size(); j++) {
std::cout << waveform[j] << std::endl;
}
*/
//TH1F istogramma("istogramma", "istogramma", 10, -5., 5.);
TFile* outputfile = new TFile("aa.root", "RECREATE");
//TFile* outputfile = 0;
//outputfile = TFile::Open("aa.root", "RECREATE");
TTree* dataTree = new TTree("dataTree", "Tree with vector");
dataTree->Branch("test", &waveform);
dataTree->Branch("pp", pp);
for (int j = 0; j < 10; j++) {
waveform.clear();
for (Int_t i = 0; i < 10; i++) {
pp[i] = i;
waveform.push_back(j);
}
dataTree->Fill();
}
outputfile->Write();
outputfile->Close();
std::cout << "ppppppp" << std::endl;
return 0;
}
and the error information is following:
Please read tips for efficient and successful posting and posting code
ROOT Version: Not Provided
_Platform:VS2022
_Compiler:6.26/10
pcanal
December 6, 2022, 11:22pm
2
I don’t any ‘obvious’ problem and you code as is works ‘for me’ on linux (when compiling as an executable and run through valgrind).
How do you use your code?
qq_pp
December 7, 2022, 12:38am
3
I can’t run it in windows
Hi have no problem with this code:
#include <TFile.h>
#include <TTree.h>
#include <iostream>
int main(int argc, char* argv[])
{
std::vector<Int_t> waveform;
int pp[10];
TFile* outputfile = new TFile("aa.root", "RECREATE");
TTree* dataTree = new TTree("dataTree", "Tree with vector");
dataTree->Branch("test", &waveform);
dataTree->Branch("pp", pp);
for (int j = 0; j < 10; j++) {
waveform.clear();
for (Int_t i = 0; i < 10; i++) {
pp[i] = i;
waveform.push_back(j);
}
dataTree->Fill();
}
outputfile->Write();
outputfile->Close();
std::cout << "ppppppp" << std::endl;
return 0;
}
compiled with:
cl -nologo -MD -GR -EHsc -Zc:__cplusplus -std:c++17 qq_pp.cxx -I %ROOTSYS%\include /link -LIBPATH:%ROOTSYS%\lib libCore.lib libRIO.lib libTree.lib libHist.lib
You probably want: dataTree->Branch("pp", pp, "pp[10]/I");
qq_pp
December 7, 2022, 11:28pm
6
I think the link is ok! It just can’t run in windows! I can’t resolve it.
qq_pp
December 7, 2022, 11:30pm
7
For branch of array , it’s ok! I have tried it! For the branch of vector , it’s failed!
How did you compile your code?
qq_pp
December 8, 2022, 7:18am
9
I use the VS debug button to link and run.
Well, you must verify that you are using the same compiler flags than ROOT itself…
qq_pp
December 9, 2022, 1:52am
11
Sorry, I am not familiar with the VS. Would you tell me how can I check the compiler flags in VS? Thank you!
Read the online documentation of how to set the compiler options in Visual Studio for those flags:
Or, like I did, from a x86 Native Tools Command Prompt for VS 2022
(for 32 bit) or a x64 Native Tools Command Prompt for VS 2022
(for 64bit) use this command to compile your code:
cl -nologo -MD -GR -EHsc -Zc:__cplusplus -std:c++17 qq_pp.cxx -I %ROOTSYS%\include /link -LIBPATH:%ROOTSYS%\lib libCore.lib libRIO.lib libTree.lib libHist.lib
qq_pp
December 15, 2022, 12:18am
13
I have added the complier flags into VS, by this following way:
But, the link is wrong,and the error is following:
How can I fix it? Thank You!
That won’t work. Try to build in RelWithDebInfo
and instead of adding the flags in Additional options
, try to find how to set them in Visual Studio options, as mentioned in the link I posted before. And if you build in Debug
mode, make sure to link with the Release
runtime libraries (/MD
flag) and use the Debug
version of ROOT. You cannot mix debug and release build with Visual Studio
system
Closed
December 29, 2022, 7:08am
15
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.