c ++ читает файл с помощью ccfits

Так … кто-нибудь может увидеть, что я здесь делаю не так ?! Я пытаюсь прочитать *.fits файл в C ++ с помощью CCfits следуя их примеру в http://heasarc.gsfc.nasa.gov/fitsio/CCfits/html/readimage.html.

#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 не работает, но так как никто на самом деле не углубился в это … у меня ничего не осталось). Это сводит меня с ума, я думаю, что упускаю что-то действительно очевидное.

Благодарю.

2

Решение

Стандарт configure а также make, make install петля CCfits
установка помещает библиотеки в /.libs папка с кодом. Если не
вы используете libtools, -L compiler/linker переключатель нужно посмотреть
вниз, чтобы найти библиотеку:

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

Другие решения

Если нет libCCfits.so, это ошибка в используемом вами дистрибутиве Linux. (Я столкнулся с проблемами в эквивалентных сетях с другими библиотеками в старых дистрибутивах Fedora.) Самый простой способ исправить это — добавить символическую ссылку из libCCfits.so а также libCCfits.so.0 в 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"

где точки зависят от ваших предпочтений и от местоположения базовой конфигурации.

0

По вопросам рекламы [email protected]