2

所以......谁能看到我在这里做错了什么?!?我正在尝试使用http://heasarc.gsfc.nasa.gov/fitsio/CCfits/html/readimage.html上的示例读取*.fitsC++ 中的文件。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编译不正确?

(这与CCfits 库演示代码不起作用有关,但由于没有人真正对此进行扩展......我一无所有)。这让我发疯,我想我错过了一些非常明显的东西。

谢谢。

4

2 回答 2

1

如果没有libCCfits.so,这是您正在使用的 Linux 发行版中的错误。(我在较旧的 Fedora 发行版上遇到了其他库的等价问题。)修复它的最简单方法是添加一个符号链接 fromlibCCfits.solibCCfits.so.0to 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 的位置。

于 2015-05-07T08:16:59.170 回答
0

安装的标准configureand循环 将库放入代码的文件夹中。除非您使用的是 libtools,否则交换机需要向下查看才能找到库:makemake installCCfits/.libs-L compiler/linker

g++ ...  -Lblabla/CCfits/CCfits/.libs ...
于 2014-06-24T13:43:20.327 回答