Так … кто-нибудь может увидеть, что я здесь делаю не так ?! Я пытаюсь прочитать *.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 не работает, но так как никто на самом деле не углубился в это … у меня ничего не осталось). Это сводит меня с ума, я думаю, что упускаю что-то действительно очевидное.
Благодарю.
Стандарт configure
а также make
, make install
петля CCfits
установка помещает библиотеки в /.libs
папка с кодом. Если не
вы используете libtools, -L compiler/linker
переключатель нужно посмотреть
вниз, чтобы найти библиотеку:
g++ ... -Lblabla/CCfits/CCfits/.libs ...
Если нет 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"
где точки зависят от ваших предпочтений и от местоположения базовой конфигурации.