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

Posted

技术标签:

【中文标题】c++ 使用 ccfits 读取适合文件【英文标题】:c++ reading fits file using ccfits 【发布时间】:2014-04-02 18:30:07 【问题描述】:

所以...谁能看到我在这里做错了什么?!?我正在尝试按照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 有点相关,但由于没有人真正对此进行扩展......我一无所有)。这让我发疯,我想我错过了一些非常明显的东西。

谢谢。

【问题讨论】:

来吧伙计们,有人必须知道一些事情...这不是真正的 CCfits 相关,它更多的是 C++...因为我无法弄清楚为什么即使在header 我不能在我的程序中使用它...谢谢:) 【参考方案1】:

如果没有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 的位置。

【讨论】:

嗯,谢谢你的回答,但我早就离开了,我不再需要它了,所以我不会再花时间去弄清楚哪里出了问题。也就是说,希望其他人会发现这很有用【参考方案2】:

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

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

【讨论】:

嗯,是的,可能是这样,但我正在使用(我从这个开始......)Ubuntu附带的软件包:libccfits-devlibccfits0所以它们安装在/usr/lib/x86_64-linux-gnu/libCCfits.*/usr/include/CCfits,因此编译中的-L/usr/lib/x86_64-linux-gnu/。但即使这样也行不通。现在我确实意识到了一些事情,/usr/lib... 文件是libCCfits.so.*。它是否不起作用可能是因为没有专门的libCCfirst.so?我不记得链接器是否也查看.so.0* 文件...无论如何谢谢

以上是关于c++ 使用 ccfits 读取适合文件的主要内容,如果未能解决你的问题,请参考以下文章

C++ 缓冲文件读取

在 C++ 中,如何使用多个线程读取一个文件?

读取 BMP 文件 C++(读取 BMP 标头时出现问题)

使用 C++ 读取文本文件

如何使用 Qt/C++ 创建/读取/写入文件并使用程序在本地存储设置

C++:使用 Boost 序列化来写入/读取文件 [关闭]