CCfits library demo code not working

谁说胖子不能爱 提交于 2020-02-02 13:39:05

问题


I'm new to C++. Ultimately, I'm trying to translate some code from python in order to perform analysis on some simulations of supernovae. However, in order to do this, I have to be able to import .fits files into my C++ code as an array. I downloaded the cfitsio and ccfits libraries, and they appear to be installed correctly given that a simple code consisting of an #include <CCfits> and an int main with a print statement in it compiles and runs. However, taking the demo code from NASA (http://heasarc.gsfc.nasa.gov/fitsio/CCfits/html/readimage.html) with the name changed to the .fits file I wish to open (which is in my home directory) to import a .fits file using these libraries doesn't compile. The precise code I'm using (Sobelattempt.cc) is:

#include <CCfits>
#include <iostream>
#include <cmath>
#include <memory>
using namespace CCfits;
int readimage()
{
     std::auto_ptr<FITS> pInfile(new FITS("Supernova45F.fits",Read,true));

     PHDU& image=pInfile->pHDU(); 

     std::valarray<unsigned long>  contents;

     // read all user-specifed, coordinate, and checksum keys in the image
     image.readAllKeys();

     image.read(contents);

     // this doesn't print the data, just header info.
     std::cout << image << std::endl;

     long ax1(image.axis(0));
     long ax2(image.axis(1));

     for (long j = 0; j < ax2; j+=10)
     {
             std::ostream_iterator<short> c(std::cout,"\t");
             std::copy(&contents[j*ax1],&contents[(j+1)*ax1-1],c);
             std::cout << '\n';       
     }

     std::cout << std::endl;
      return 0;   
}

int main(){
return 0;
}

I'm compiling using the command:

g++ Sobelattempt.cc -o Sobel -I/home/Sam/CCfits -I/home/Sam/cfitsio

And I get the errors:

/tmp/ccS0m6h4.o: In function `readimage()':
Sobelattempt.cc:(.text+0x69): undefined reference to `CCfits::FITS::FITS(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, CCfits::RWmode, bool, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)'
Sobelattempt.cc:(.text+0x15e): undefined reference to `CCfits::FITS::pHDU()'
Sobelattempt.cc:(.text+0x17d): undefined reference to `CCfits::HDU::readAllKeys()'
/tmp/ccS0m6h4.o: In function `std::auto_ptr<CCfits::FITS>::~auto_ptr()':
Sobelattempt.cc:(.text._ZNSt8auto_ptrIN6CCfits4FITSEED2Ev[_ZNSt8auto_ptrIN6CCfits4FITSEED5Ev]+0x1d): undefined reference to `CCfits::FITS::~FITS()'
/tmp/ccS0m6h4.o: In function `void CCfits::PHDU::read<unsigned long>(std::valarray<unsigned long>&, long, long, unsigned long*)':
Sobelattempt.cc:(.text._ZN6CCfits4PHDU4readImEEvRSt8valarrayIT_EllPS3_[void CCfits::PHDU::read<unsigned long>(std::valarray<unsigned long>&, long, long, unsigned long*)]+0x73): undefined reference to `typeinfo for CCfits::PHDU'
Sobelattempt.cc:(.text._ZN6CCfits4PHDU4readImEEvRSt8valarrayIT_EllPS3_[void CCfits::PHDU::read<unsigned long>(std::valarray<unsigned long>&, long, long, unsigned long*)]+0x12f): undefined reference to `typeinfo for CCfits::PHDU'
Sobelattempt.cc:(.text._ZN6CCfits4PHDU4readImEEvRSt8valarrayIT_EllPS3_[void CCfits::PHDU::read<unsigned long>(std::valarray<unsigned long>&, long, long, unsigned long*)]+0x20d): undefined reference to `typeinfo for CCfits::PHDU'
Sobelattempt.cc:(.text._ZN6CCfits4PHDU4readImEEvRSt8valarrayIT_EllPS3_[void CCfits::PHDU::read<unsigned long>(std::valarray<unsigned long>&, long, long, unsigned long*)]+0x2ec): undefined reference to `typeinfo for CCfits::PHDU'
Sobelattempt.cc:(.text._ZN6CCfits4PHDU4readImEEvRSt8valarrayIT_EllPS3_[void CCfits::PHDU::read<unsigned long>(std::valarray<unsigned long>&, long, long, unsigned long*)]+0x3b5): undefined reference to `CCfits::ULBASE'
Sobelattempt.cc:(.text._ZN6CCfits4PHDU4readImEEvRSt8valarrayIT_EllPS3_[void CCfits::PHDU::read<unsigned long>(std::valarray<unsigned long>&, long, long, unsigned long*)]+0x435): undefined reference to `typeinfo for CCfits::PHDU'
Sobelattempt.cc:(.text._ZN6CCfits4PHDU4readImEEvRSt8valarrayIT_EllPS3_[void CCfits::PHDU::read<unsigned long>(std::valarray<unsigned long>&, long, long, unsigned long*)]+0x4d1): undefined reference to `typeinfo for CCfits::PHDU'
Sobelattempt.cc:(.text._ZN6CCfits4PHDU4readImEEvRSt8valarrayIT_EllPS3_[void CCfits::PHDU::read<unsigned long>(std::valarray<unsigned long>&, long, long, unsigned long*)]+0x59d): undefined reference to `CCfits::USBASE'
Sobelattempt.cc:(.text._ZN6CCfits4PHDU4readImEEvRSt8valarrayIT_EllPS3_[void CCfits::PHDU::read<unsigned long>(std::valarray<unsigned long>&, long, long, unsigned long*)]+0x61d): undefined reference to `typeinfo for CCfits::PHDU'
Sobelattempt.cc:(.text._ZN6CCfits4PHDU4readImEEvRSt8valarrayIT_EllPS3_[void CCfits::PHDU::read<unsigned long>(std::valarray<unsigned long>&, long, long, unsigned long*)]+0x6b9): undefined reference to `typeinfo for CCfits::PHDU'
Sobelattempt.cc:(.text._ZN6CCfits4PHDU4readImEEvRSt8valarrayIT_EllPS3_[void CCfits::PHDU::read<unsigned long>(std::valarray<unsigned long>&, long, long, unsigned long*)]+0x77f): undefined reference to `CCfits::FitsFatal::FitsFatal(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/tmp/ccS0m6h4.o:(.rodata._ZTIN6CCfits10PrimaryHDUImEE[typeinfo for CCfits::PrimaryHDU<unsigned long>]+0x10): undefined reference to `typeinfo for CCfits::PHDU'
/tmp/ccS0m6h4.o:(.rodata._ZTIN6CCfits10PrimaryHDUIsEE[typeinfo for CCfits::PrimaryHDU<short>]+0x10): undefined reference to `typeinfo for CCfits::PHDU'
/tmp/ccS0m6h4.o:(.rodata._ZTIN6CCfits10PrimaryHDUItEE[typeinfo for CCfits::PrimaryHDU<unsigned short>]+0x10): undefined reference to `typeinfo for CCfits::PHDU'
/tmp/ccS0m6h4.o:(.rodata._ZTIN6CCfits10PrimaryHDUIiEE[typeinfo for CCfits::PrimaryHDU<int>]+0x10): undefined reference to `typeinfo for CCfits::PHDU'
/tmp/ccS0m6h4.o:(.rodata._ZTIN6CCfits10PrimaryHDUIjEE[typeinfo for CCfits::PrimaryHDU<unsigned int>]+0x10): undefined reference to `typeinfo for CCfits::PHDU'
/tmp/ccS0m6h4.o:(.rodata._ZTIN6CCfits10PrimaryHDUIhEE[typeinfo for CCfits::PrimaryHDU<unsigned char>]+0x10): more undefined references to `typeinfo for CCfits::PHDU' follow
collect2: ld returned 1 exit status

回答1:


The two linker options to link to the CCfits library are -lCCfits -lcfitsio . In addition, the -L... flag may be needed if the LD_LIBRARY_PATH does not cover the directory with these two libraries.



来源:https://stackoverflow.com/questions/17829788/ccfits-library-demo-code-not-working

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!