C++ 使用 ccfits 读取适合文件

标签 c++ fits valarray

所以...任何人都可以看到我在这里做错了什么吗?!?我正在尝试按照 http://heasarc.gsfc.nasa.gov/fitsio/CCfits/html/readimage.html 中的示例使用 CCfits 读取 C++ 中的 *.fits 文件。 .

#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 编译不正确?

(这与 CCfits library demo code not working 有点相关,但由于没有人真正对此进行扩展......我什么也没有留下)。这让我发疯,我想我错过了一些非常明显的东西。

谢谢。

最佳答案

如果没有 libCCfits.so,则这是您使用的 Linux 发行版中的错误。 (我在较旧的 Fedora 发行版上遇到了与其他库的等效网络问题。)修复此问题的最简单方法是添加来自 libCCfits.solibCCfits.so.0 的符号链接(symbolic link)> 到 libCCfits.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 的位置。

关于C++ 使用 ccfits 读取适合文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22820019/

相关文章:

c++ - Qt5 应用程序不会在 Ubuntu 上绘制任何窗口

c++ - 模板中的默认参数

python - astropy.io.fits 从具有多个 HDU 的大型拟合文件中读取行

c++ - 通过成员初始化列表初始化结构体

c++ - 将 valarray 转换为基本数组

c++ - 为什么 valarray 在 Visual Studio 2015 上这么慢?

C++ 文件内存映射容器类似于 std::vector/boost::array

c++ - 使用重新解释指向整数的指针

python - 调整子图大小后如何更改标题?

python - 如何使用 Python 将 Gaia 天体测量数据绘制为 TESS 图像?