使用ccfits读取c ++文件

时间:2014-04-02 18:30:07

标签: c++ fits valarray

所以...谁能看到我在这里做错了什么?!?我正在尝试使用*.fits在{+ 3}}中按照他们的示例在C ++中阅读CCfits文件。

#include <iostream>
#include <valarray>
#include <CCfits/CCfits.h>
#include <CCfits/PHDU.h>

namespace fit = CCfits;

int main(int argc, char * argv[]) {
    fit::FITS inFile(
        "../data/example/example.fits",
        fit::Read,
        true
    );

    fit::PHDU & phdu = inFile.pHDU();

    std::valarray<unsigned int> fitsImage;
    phdu.read(fitsImage);

    return 0;
}

我收到以下错误:

undefined reference to `void CCfits::PHDU::read<unsigned int>(std::valarray<unsigned int>&)'
collect2: error: ld returned 1 exit status

我正在与此联系:

g++ test.cpp -o test -L/usr/lib/x86_64-linux-gnu/ -std=c++11 -lCCfits -lcfitsio

虽然我看了/usr/include/CCfits/PHDU.h并且有这个:

template<typename S>
void read(std::valarray<S>& image);

libCCfits是否可能无法正确编译?

(这与http://heasarc.gsfc.nasa.gov/fitsio/CCfits/html/readimage.html有些相关,但是因为没有人真正扩展...我没有任何东西)。这让我发疯,我想我错过了一些非常明显的东西。

感谢。

2 个答案:

答案 0 :(得分:0)

configure的标准makemake installCCfits循环 安装将库放入代码的/.libs文件夹中。除非 您正在使用libtools,-L compiler/linker开关需要查看 到这里找到图书馆:

g++ ...  -Lblabla/CCfits/CCfits/.libs ...

答案 1 :(得分:0)

如果没有libCCfits.so,则这是您正在使用的Linux发行版中的错误。 (我在较旧的Fedora发行版上遇到过与其他库相同的问题。)最简单的解决方法是添加从libCCfits.solibCCfits.so.0libCCfits.so.0.0.0的符号链接,假设后者存在在..../.libs文件夹中。 另一种方法是通过

自己编译CCfits-2.4.tar.gz的源包
tar -xzf CCfits-2.4.tar.gz

cd CCfits

./configure --prefix=.... --with-cfitsio-include=..../cfitsio/cfitsio --enable-static LDFLAGS="-L..../cfitsio/cfitsio"

其中点取决于您的偏好以及底层cfitsio的位置。